- ベストアンサー
PHPでtsvを読み込んでソートして出力する方法
- PHPでtsvファイルを読み込み、特定の要素を優先順にソートしてファイルに出力する方法について教えてください。
- tsvファイルのデータをタブ区切りで読み込み、要素2→要素1→要素4→要素5の順番で優先して降順にソートし、新しいファイルに出力する方法を教えてください。
- PHPの初心者ですが、tsvファイルを読み込んで特定の要素を優先的にソートしてファイルに出力する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まずは一行毎に読み込むか、全てを読みこんだ後で改行でexplodeして、それぞれの行が配列の要素となるような配列を作成します。 各配列の要素は、一行をタブ文字(\t)で、explodeした配列とします。 $tsv=array(array('リンゴ','東京','100円','紅玉','2011/10/1 2:00:00') ,array(.....),array(.....),......); のようなデータです。(実際にはtsvファイルから読みこんで、上記と同等の配列を作成する) それを二次元配列と呼ぶか、配列の配列と呼ぶかはお好きな方を。 あとは、array_multisort、usortのリファレンスを確認して、どちらかお好きな方を選択してください。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
今回のデータなら多分こんな感じ <?PHP function mySort($a,$b){ if($a[1]<$b[1]) return 1; if($a[1]>$b[1]) return -1; if($a[0]<$b[0]) return -1; if($a[0]>$b[0]) return 1; if($a[3]<$b[3]) return 1; if($a[3]>$b[3]) return -1; if($a[4]<$b[4]) return -1; if($a[4]>$b[4]) return 1; return 0; } if (($handle = fopen("test.tsv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) { $row++; $datas[]=$data; } fclose($handle); } usort($datas,"mySort"); print_r($datas); //ファイルの書き込みは省略 ?> 日時の比較は日付として比較するのと文字列として比較するのでは ずれがでるので十分注意してください
お礼
ありがとうございます。 上記の方法を試す前にとりあえずは解決しました。 後学のためにご教授頂いた方法も試してみます。
- honoka-cha
- ベストアンサー率54% (40/73)
PHPが必須ではない状況なら、 perlを使ったほうが楽かな perlに挑戦してみてはどうでしょう
お礼
ありがとうございます Pealは全く解りませんので少しは解るPHPを使っている次第です。 たぶん、これに関してはそちらのほうが向いているんだと思います。
お礼
10日間色々やっている最初のほうに上記のことを試していたのですが、 うまくいきませんでした。 ご回答をいただいて「やったんだよね~それは。」 とおもいつつもう一度書いたらうまくいきました。 前と何が違うかわからないのですがとにかく解決しました。 ありがとうございました。