PHPの質問です

a.csvがあります
a.csv
==============
みかん,A,1,
みかん,B,4
みかん,C,3,
メロン,A,1,
メロン,B,2,
メロン,C,2,
==============
これを2列目で降順でソートしてアウトプットしたいのですが
その場合どのようなPHPを組めばいいでしょうか?
よろしくお願いします。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2016/06/14 01:15:02
  • 終了:2016/06/21 01:20:03

回答(2件)

id:studiocherry No.1

studiocherry回答回数266ベストアンサー獲得回数942016/06/14 20:54:07

ポイント100pt

array_multisort を使って、こんな感じでどうでしょうか。

<?php
$data = [
    [みかん,A,1],
    [みかん,B,4],
    [みかん,C,3],
    [メロン,A,1],
    [メロン,B,2],
    [メロン,C,2],
];

print_r($data);
foreach ( (array) $data as $key => $value) {
    $sort[$key] = $value[2];
}
array_multisort($sort, $data);
print_r($data);

array_multisort
http://php.net/manual/ja/function.array-multisort.php

id:gaugjiuaej

最後の行を
file_put_contents("a.csv", $data);
と書き変えて実行しa.csvファイルを見たところ

ArrayArrayArrayArrayArrayArray
と書かれておりできていませんでした

2016/06/14 22:26:51
id:tobeoscontinue No.2

tobeoscontinue回答回数206ベストアンサー獲得回数482016/06/15 21:31:11

ポイント100pt
<?php
$csv = array_map('str_getcsv', file('a.csv'));

usort($csv, function ($a, $b) {
  return $a[1] == $b[1] ? 0 : ($a[1] < $b[1] ? -1 : 1); 
} );

print implode("\n", array_map(function ($c) { return implode(',', $c); }, $csv));

fileでa.csvを配列に取り込みarray_mapでstr_getcsvを使って二次元の配列にします。
usortで二次元の配列の2列目でソートします。
printする際はimplodeで,で結合して一次元の配列にし、更に改行でimplodeして文字列にしています。
普通にforeachで回した方が読みやすいのですが。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません