アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のようなtsvファイルがあります。データは1行目に順次書き加えられていきます。
----
りんご東京100円紅玉2011/10/1 2:00:00
りんご大阪100円紅玉2011/10/1 1:00:00
りんご東京200円紅玉2011/9/8 2:00:00
りんご東京200円ゴールデン2011/9/1 2:00:00
バナナ東京80円モンキー2011/8/1 3:00:00
バナナ大阪80円モンキー2011/8/1 2:00:00
バナナ東京100円モンキー2011/8/1 1:30:00
バナナ東京100円ゴールデン2011/8/1 1:00:00
----

これをタブ区切りで左から要素1、要素2,要素3,要素4,要素5として、
要素2→要素1→要素4→要素5の優先順で、それぞれ降順に並べ替えてファイル出力したいのですが、
過去ログ含め十日ほど色々調べたのですが、php初心者のため根を上げてしまいました。

----
りんご東京100円紅玉2011/10/1 2:00:00
りんご東京200円紅玉2011/9/8 2:00:00
りんご東京200円ゴールデン2011/9/1 2:00:00
バナナ東京80円モンキー2011/8/1 3:00:00
バナナ東京100円モンキー2011/8/1 1:30:00
バナナ東京100円ゴールデン2011/8/1 1:00:00
りんご大阪100円紅玉2011/10/1 1:00:00
バナナ大阪80円モンキー2011/8/1 2:00:00
----
というファイルを作成したいです。
どなたか教えてもらえませんでしょうか。

A 回答 (3件)

まずは一行毎に読み込むか、全てを読みこんだ後で改行でexplodeして、それぞれの行が配列の要素となるような配列を作成します。


各配列の要素は、一行をタブ文字(\t)で、explodeした配列とします。

$tsv=array(array('リンゴ','東京','100円','紅玉','2011/10/1 2:00:00')
,array(.....),array(.....),......);
のようなデータです。(実際にはtsvファイルから読みこんで、上記と同等の配列を作成する)

それを二次元配列と呼ぶか、配列の配列と呼ぶかはお好きな方を。

あとは、array_multisort、usortのリファレンスを確認して、どちらかお好きな方を選択してください。
    • good
    • 0
この回答へのお礼

10日間色々やっている最初のほうに上記のことを試していたのですが、
うまくいきませんでした。
ご回答をいただいて「やったんだよね~それは。」
とおもいつつもう一度書いたらうまくいきました。
前と何が違うかわからないのですがとにかく解決しました。
ありがとうございました。

お礼日時:2011/11/17 21:15

今回のデータなら多分こんな感じ



<?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);
//ファイルの書き込みは省略
?>

日時の比較は日付として比較するのと文字列として比較するのでは
ずれがでるので十分注意してください
    • good
    • 0
この回答へのお礼

ありがとうございます。
上記の方法を試す前にとりあえずは解決しました。
後学のためにご教授頂いた方法も試してみます。

お礼日時:2011/11/17 21:16

PHPが必須ではない状況なら、


perlを使ったほうが楽かな
perlに挑戦してみてはどうでしょう
    • good
    • 0
この回答へのお礼

ありがとうございます
Pealは全く解りませんので少しは解るPHPを使っている次第です。
たぶん、これに関してはそちらのほうが向いているんだと思います。

お礼日時:2011/11/17 21:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!