PHP で 2 次元連想配列のソートを実装する方法
たとえば、配列は次のようになります:
<br />
$example = array( array('b'=>7, 'rsd'=>6, 'gdd'=>3),<br />
array('d'=>5, 'ess'=>8, 'ffs'=>5),<br />
array('c'=>2, 'sdv'=>5, 'vfs'=>6),<br />
array('a'=>8, 'hds'=>4, 'rfs'=>9)); <br />
ログイン後にコピー
PHP システム関数を使用する代わりに、uasort() または uksort() を使用してカスタム関数を作成して渡します。
関数compare($X, $Y)
次のように uasort($example, 'compare') を使用します。
この比較はどうやって書くのでしょうか?
結合ではない 2 次元配列の比較の書き方を知っています。
<br />
function compare($x, $y)<br />
{<br />
if($x[0] == $y[0])<br />
return 0;<br />
elseif($x[0] < $y[0])<br />
return -1;<br />
else<br />
return 1;<br />
}<br />
ログイン後にコピー
-----解決策--------------------------------手動 array_multisort
例 4 を見てください
------解決策------------例 4 データベースの結果の並べ替え
この例では、データ配列内の各セルがテーブル内の行を表します。これは、データベースに記録される典型的なデータのコレクションです。
例のデータは次のとおりです:
ボリューム
------解決策--------- エディション
-------+----------
67
------解決策-------------------------------- 2
86
------解決策-------------------------------- 1
85
------解決策-------------------------------- 6
98
------解決策-------------------------------- 2
86
------解決策-------------------------------- 6
67
------解決策-------------------------------- 7
データはすべて data という名前の配列に格納されます。これは通常、mysql_fetch_assoc() などのループを通じてデータベースから取得されます。
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
?>
この例では、ボリュームは降順でソートされ、エディションは昇順でソートされます。
これで行を含む配列ができましたが、array_multisort() には列を含む配列が必要なので、次のコードを使用して列を取得し、並べ替えます。
// 列のリストを取得します
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}