PHPで多次元配列のソートが簡単にできる便利な機能があったので,忘れないようにメモ。
usort()で比較関数を準備したりしなくても,簡単にできるのでした。
01 | $data = array (); |
02 | $data [] = array ( 'num' => 24, 'name' => 'red' ); |
03 | $data [] = array ( 'num' => 3, 'name' => 'blue' ); |
04 | $data [] = array ( 'num' => 15, 'name' => 'green' ); |
05 | $data [] = array ( 'num' => 77, 'name' => 'white' ); |
06 | $data [] = array ( 'num' => 15, 'name' => 'black' ); |
07 |
08 | print_r( $data ); |
09 |
10 | foreach ( $data as $key => $row ) { |
11 | $num [ $key ] = $row [ 'num' ]; |
12 | $name [ $key ] = $row [ 'name' ]; |
13 | } |
14 | array_multisort ( $num , SORT_DESC, $name , SORT_ASC, $data ); |
15 |
16 | print_r( $data ); |
実行結果はこうなります。
ソート前
01 | Array( |
02 | [0] => Array |
03 | ( |
04 | [num] => 24 |
05 | [name] => red |
06 | ) |
07 | [1] => Array |
08 | ( |
09 | [num] => 3 |
10 | [name] => blue |
11 | ) |
12 | [2] => Array |
13 | ( |
14 | [num] => 15 |
15 | [name] => green |
16 | ) |
17 | [3] => Array |
18 | ( |
19 | [num] => 77 |
20 | [name] => white |
21 | ) |
22 | [4] => Array |
23 | ( |
24 | [num] => 15 |
25 | [name] => black |
26 | ) |
27 | ) |
ソート後
01 | Array( |
02 | [0] => Array |
03 | ( |
04 | [num] => 77 |
05 | [name] => white |
06 | ) |
07 | [1] => Array |
08 | ( |
09 | [num] => 24 |
10 | [name] => red |
11 | ) |
12 | [2] => Array |
13 | ( |
14 | [num] => 15 |
15 | [name] => black |
16 | ) |
17 | [3] => Array |
18 | ( |
19 | [num] => 15 |
20 | [name] => green |
21 | ) |
22 | [4] => Array |
23 | ( |
24 | [num] => 3 |
25 | [name] => blue |
26 | ) |
な感じで,’num’ の降順,’name’ の昇順で,綺麗に揃いました。
最近のコメント