• ベストアンサー

csvファイルのタブで区切られた部分まで削除

csvファイルaを list($li_a,$li_b,$li_c,) = split("\t",$val); というようにタブで区切られた部分でリスト化しました。 配列の順番をabc順に並べようとして、 sortを使ったのですが、 一番初めの$li_aを基準に並べ変えられてしまいます。 $li_bを基準に並べ変えたい場合どうしたらよいのでしょうか。 csvファイルの一番初めのタブで区切られる部分まで削除という指示をすれば出来そうかなと思ったのですが、、、、。

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

  • ベストアンサー
  • cyanberry
  • ベストアンサー率50% (117/230)
回答No.3

同じことですが、お礼の内容を踏まえて以下ではどうでしょうか? $li_bをキー値とする配列を作成して、ksortすれば良いかと思います。 「$li_b.(++$count)」は$li_bが重複した値を持つ場合に上書きされないようにする対処です。 ---- $count = 0; $result =array(); $example = file('a.csv'); foreach ($example as $val) { list($li_a,$li_b,$li_c) = split("\t",$val); $result[$li_b.(++$count)] = array($li_a,$li_b,$li_c); } ksort($result); ----

hukazuo
質問者

補足

ありがとうございました。 この方法でできましたー。

その他の回答 (3)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.4

繰返しで、回すこともないでしょう。 また、必要な部分を取り出す作業もいりますし。 こんなのでは? <?php $l = array('x3,3,y3','x0,0,y0','x1,1,y1','x2,2,y2'); $a = array_map('split', array_fill(0, count($l), ','), $l); usort($a, create_function('$x,$y', 'if($x[1] < $y[1]) return -1; else if($x[1] > $y[1]) return 1; else return 0;')); var_dump($a); ?> 最初の$lは、実際にはファイルから読みます。 ここでは、カンマ , で区切ってますが、タブ区切りならカンマの部分を書き直してください。

hukazuo
質問者

お礼

ありがとうございました^^

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.2

<?php $a = array(array('x', 'b', 'y'),array('xx', 'a', 'yy')); var_dump(usort($a, create_function('$x,$y', 'if($x[1] < $y[1]) return -1; else if($x[1] > $y[1]) return 1; else return 0;'))); var_dump($a); ?> こんなんで、どうでしょう?

hukazuo
質問者

お礼

ありがとうございます、、、。 何度かやってみたのですが、うまくいかなかったので、 ほかの方法で実行しました。

  • cyanberry
  • ベストアンサー率50% (117/230)
回答No.1

配列がどういう構成になっているのか分からないので、質問の意味がいまいちわからないのですが・・・。 予想で回答しますが、以下のような感じでどうでしょうか。 ---- $result =array(); $fp = fopen ("a.csv", "r"); while (!feof($fp)) { $val = fgets($fp); list($li_a,$li_b,$li_c) = split("\t",$val); $result[$li_b] = array($li_a,$li_b,$li_c); } ksort($result); ---- $li_bの値が重複する可能性がある場合はこの方法ではダメです。 「$li_b+通し番号」をキーにするなどの工夫が必要です。

hukazuo
質問者

補足

配列はa.csvを $example = file('a.csv'); というようにし、 [0]=>一行目 [1]=>二行目 [2]=>三行目 というようにしてます。 一行目の真ん中の文字列を基準に並べ変えたいのですが、、、・

関連するQ&A

専門家に質問してみよう