• ベストアンサー

phpでcsvの並び替えを行いたい

phpでcsvに入ってるデータベースの最後の行を最初に持ってきて保存するにはどうしたらよいのでしょうか?

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

>csvに入ってるデータベースの最後の行を最初に持ってきて保存す CSV形式のテキストファイルなのか、CSV形式でメモリ上に保持しているのか、あるいは(本当に)データベースのvarcharの列にCSV形式で保存しているのか・・・まったく読み取れません。 普通は「CSV」といえばCSVファイル(テキストファイル)を指しますし、「データベース」であれば最初とか最後とかいう概念自体がありません(orderを指定しなければ順序は不定とみなすのが一般的です)。 CSVファイルであれば単純なテキストファイル処理です(CSVということを意識する必要がありません)。排他処理を考えなくていいなら $arr = file($filename, FILE_IGNORE_NEW_LINES); $last = array_pop($arr); array_unshift($arr, $last); file_put_contents($filename, implode(PHP_EOL, $arr)); だけです。

その他の回答 (1)

noname#244856
noname#244856
回答No.1

PHPから直接CSVデータを「効率よく」書き換えることは出来ません。そのような作業では全て取得して配列に格納した後、配列の先頭に挿入し、またCSVデータに変換して上書きで保存し直す必要があります。以下選択肢。 1. MySQL・PostgreSQL・SQLiteなどのデータベースを利用する。(CSVはデータベースとは言えません) PHPでデータベースに接続するときのまとめ http://qiita.com/mpyw/items/b00b72c5c95aac573b71 2. serialize関数/unserialize関数を利用する。CSV形式ではなくシリアル形式となります。「どうせ効率のいい書き換えが出来ないならば、PHPでもっと扱いやすくしてしまおう」という発想です。変数の内容をそのままファイルに保存したり、ファイルから変数に復元したりすることが出来ます。CSVではもうちょっと泥臭い処理が必要になるので、テキストエディタでCSVファイルを直接編集したいなどの希望がなければシリアルの方がおすすめです。 serialize http://php.net/manual/ja/function.serialize.php unserialize http://www.php.net/manual/ja/function.unserialize.php array_unshift http://php.net/manual/ja/function.array-unshift.php

関連するQ&A

  • phpでcsvをhtmlにしたい

    phpでcsvデータ(行はその都度変わる。列は5行)をhtmlに罫線をかけて 表として表示させたいのですがどのように記述したらよいかわかりません。 Win2000/Anhttpd/php4.3.2

  • PHPにて行が多い場合のCSVファイル取込

    CSVアップロード機能が構築されておりますが、 CSVファイルを while($data = fgetcsv($fp, 10000, "\t")){ で1行ずつ、取得し、データベースに書き込みが 行われております。 20000行ではなかなか落ちることがありませんが、 40000行の場合、Gateway Time-outになる場合があります。 Gateway Time-outにならないためにも、 ファイルの分割を行う必要もあるかとも考えております。 PHPにて行が多い場合のCSVファイルをデータベースに書き込みを行う場合は、 どのように行うのが一般的なのでしょうか。 サーバはヘテムルを利用しており、サーバは変更できません。 ご教授のほど、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpでcsvファイルから二次元配列を作る

    php初心者です。 phpでcsvファイルを読み込んで、 配列[csvの行番号][項目名(csv一行目の内容)]=各々の値 という二次元配列を作りたいのですが、作り方が全く分かりません。 どなたか教えてください。

    • ベストアンサー
    • PHP
  • PHPでCSVの読み込みができません。

    PHP4+ApacheでWebアプリケーション(問い合わせフォーム)を開発しています。 普段はApache+PHPを導入したWindowsマシンでコーディングしていて、CSVファイルも開きます。 しかし、開発サーバ(Linuxマシン、ApacheとPHPのバージョンは同じ)へアップロードすると Windowsマシンで読み込みができていたCSVファイルが読み込みができなくなります。 CSVファイルの文字コードShift-JISで各項目は""でくくってあります。1行あたり10項目で20行固定です。 CSVファイル読み込みする理由は定義ファイルとして読み込んむためで、各行には宛先や問い合わせ内容・タイトル等を設定し、定義ファイルの番号(3桁の数字)によって問い合わせフォームを切り替えています。 ちなみにPHPの文字コードはUTF-8です。 例) "f01","パソコンセミナー申込","","","","","","","","" "f02","インターネットに触れてみよう。","","","","","","","","" "f03","申込期限2009年1月末,"","","","","","","","" "f04","hoge@aaa.jp","hage@bbb.jp","debu@ccc.jp","","","","","","" "f05","support@ddd.jp","","","","","","","",""  :  : "f20","○○○","20","△△△","","","","","","" 1行目は問い合わせフォーム名、2行目と3行目はフォーム内容のコメント、4行目は担当者宛のメールアドレス、5行目は自動応答用のメールアドレス、6行目以降は問い合わせフォームの任意設定項目(f20の場合、○○○:好きな食べ物は?、20:文字数20文字、△△△:3つ以内で記入してください)を表します。 問い合わせフォーム本体PHPと入力チェック等を行う外部ライブラリPHPを用いています。現状は、本体PHPでCSVをfopenで開いて、CSV読み込みにはfgetcsv()を使用しています。指定行以内でループさせ、該当の行の該当項目を指定しています。 CSVファイルはテンプレートのCSVファイルをコピー関数で複製・リネームしていますが テンプレートファイル内の各項目(各行先頭項目)はしっかりコピーされています。 Windows環境下では mb_convert_encodingを使用して、読み込み・書き込み(Shift-JIS⇔UTF-8変換)ともに動いています。 しかし、Linux環境下では、まったく読み込みすらできません。 Linuxで読み込みができないのがどうしてもわかりません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでCSVファイルを編集したい

    PHPを触りだして間もない者です。 PHPでCSVファイルを編集したいのですが、上手くいきません。 CSVファイルの中身は{商品番号,名前,住所,年齢}が数行入力されています。 具体的にはPHPで引数の商品番号を基にCSVファイルで編集する行数を決定して、その行の一部項目を変更したいのですが、良い方法はありますでしょうか?

    • 締切済み
    • PHP
  • 送られてくるcsvデータをphpで解析

    あるサーバから送られてくるcsvデータ(ファイル名不明)を解析するにはどうしたら良いでしょうか? csvの中身 年齢,性別,地域 20,1,30 25,2,15 これらをphpで読み取り、データベースへ という流れです。

    • 締切済み
    • PHP
  • 外部のCSVファイルをPHPで読み込み、出力させたい

    下記の質問を参考に外部のCSVファイルをPHPで読み込み、出力させるphpを書きました。 http://oshiete1.goo.ne.jp/qa1615206.html data.csvは "データ01" "データ02" "データ03" ・・・ といったように100行書いてあります。 <1ページ目に記述したphp> <?php $fp = fopen("data.csv", "r"); $repeat = 10; $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print <<<EOD $data[0] EOD; $count++ ; } fclose ($fp) ?> 2ページ目には11行目からのデータを出力したいと思い、 $data[0]の部分を$data[11]に変えたり、 $repeat = 20; $count = 11;にしたりしたのですが、 両方ともうまくいきませんでした。 2ページ目にcsvの11行目からのデータを出力するにはどうすればいいのでしょうか? 私がしたいことは、1ページ目にcsvの1~10行目を、2ページ目にcsvの11~20行目を出力したいとおもっております。 上記のphp以外の記述でも構いませんので、どなたかお分かりになる方がいらっしゃいましたら是非教えて下さい。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpのCSVの保存について教えてください

    下記のようにinputタグから値をphpにおくり、csvファイルに保存しようとしています。 値1に12345 値2に67890 値3にあいうえお というように値を送って保存し、csvファイルを開くと、 12345," 67890",あいうえお というように、値2として送ったものの先頭にダブルコーテーションとスペース、最後にダブルコーテーションが勝手に入ってしまいます。なぜ何でしょうか?対処法も含め教えていただければありがたいです。よろしくお願いします。 --------------------html---------------------------------- <form action="send.php" method="post"> 値1:<input type="text" name="aaa" > 値2:<input type="text" name="bbb" > 値3:<input type="text" name="ccc" > <input type="submit" value="送信する"> </form> --------------------php---------------------------------- <?php $val[0] = $_POST['aaa']; $val[1] = $_POST['bbb']; $val[2] = $_POST['ccc']; $fp = fopen("valdata.csv", "a"); fputcsv($fp, $val); fclose($fp); ?>

    • ベストアンサー
    • PHP
  • PHPでのcsv出力について

    PHPでのcsv出力について、教えてください。 csvファイルをあるフォルダに保存させたい(例えばZ:\csvoutput等)の ですが、どのように作ればよいのか分からず、ちょっと困っています。 ネットなどで出ている一般の(?)やり方だと、csv保存時に別画面 (ポップアップ)が出てきて、「開く」「保存」「キャンセル」のボタンが表示され、 保存時に自分でフォルダを指定して保存しますが、これを随時固定の場所に 保存させたいのです。csvのファイル名は固定で決まっています。 ちなみに、該当となる保存先フォルダは必ず存在するという前提で良い事になっています。 緊急の依頼で、ちょっと急いでいます。 下手な文章でごめんなさい。。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • CSVデータの並び替えについて

    はじめまして! 表記のとおり、CSVファイルのデータを以下のように整形して新しいCSVファイルを作成したいと考えています。 プログラミングはperlとPHPを多少かじったくらいですが、それらで有効なスクリプトを作成することは可能でしょうか?? ■元データの例 "sakura","5","6","2" "kiri","5,"3","10" "bara","5,"3","10" ■新しいCSVファイルの例 "bara","5,"3","10" "tanpopo","0","0","0" "sakura","5","6","2" "kiri","5,"3","10" 1番初めの列をキーとして、並び替える。 (並び順はあらかじめ決まっている。) 元データに存在しないキーは、2列目以降の値に0を入れて行を挿入する。(上記例ですとtanpopoが当てはまります) どなたかヒントだけでもいいので、ご教示頂けると幸いです。 よろしくお願いします。

専門家に質問してみよう