人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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


●質問者: gaugjiuaej
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● studiocherry
●100ポイント

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


gaugjiuaejさんのコメント
最後の行を file_put_contents("a.csv", $data); と書き変えて実行しa.csvファイルを見たところ ArrayArrayArrayArrayArrayArray と書かれておりできていませんでした

2 ● tobeoscontinue
●100ポイント
<?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で回した方が読みやすいのですが。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ