$a = array(array(100,a,b,c),array(105,d,e,f),array(93,g,h,i),array(102,j,k,l));
という2次元配列があるとします。
これを以下のように
$a = array(array(93,g,h,i),array(100,a,b,c),array(102,j,k,l),array(105,d,e,f));
というように内枠?の中の配列のそれぞれ0番目の要素を比較して並べ替えたいのですが、どのようにしたらよいのでしょうか。
関数 usort を使い、以下のようにしてはどうでしょう。
function mycmp($a, $b) { if ($a[0] == $b[0]) return 0; return ($a < $b) ? (-1) : (+1); } $a = array(array(100,a,b,c),array(105,d,e,f),array(93,g,h,i),array(102,j,k,l)); usort($a, 'mycmp');
usort関数で比較関数をユーザー定義すれば可能です。
<? function idx0($a, $b) { if ($a[0] == $b[0]) { return 0; } return ($a[0] < $b[0]) ? -1 : 1; } $a = array(array(100,a,b,c),array(105,d,e,f),array(93,g,h,i),array(102,j,k,l)); var_dump($a); usort($a, 'idx0'); var_dump($a); ?></pre>
上の方と同じですね。
配列は要素数が同じ場合、最初の要素から順に比較されますので、この場合は普通に sort 関数でソートできます。
(要素数が違う場合は要素数で比較される)
<?php $a = array(array(100,a,b,c),array(105,d,e,f),array(93,g,h,i),array(102,j,k,l)); sort($a) ; print_r($a) ; ?>
http://php.plus-server.net/language.operators.comparison.html
ほんとだ! ありがとうございます!!
また1日をつぶしてしまいました。
こんなイレギュラー?内容を集めた場所はないものでしょうか。
このPHPリファレンスにあるような方法しかないでしょうか。
配列内の各配列の要素[0]を抜き出して、ソートすると、連動してソートされるような、
そんな動きを既存関数のみでできるといいのですが。