Quantcast
Channel: php - 0239
Viewing all articles
Browse latest Browse all 16

PHPで複数カラムのソートが出来るarray_multisortが便利すぎる

0
0

SQLのORDER BYだけじゃ対応しきれないソートについて悩んでいたところarray_multisortを見つけたのでメモしておきます。

SELECTの結果が以下とする。

$array = [
    0 => [
       'hoge' => 'apple',
       'foo'  => 3
    ],
    1 => [
       'hoge' => 'pineapple',
       'foo'  => 1
    ],
    2 => [
       'hoge' => 'pen',
       'foo'  => 2
    ],
];

配列の中からソートしたい項目だけ別途配列として取り出して、array_multisort関数に当てる。 複数あったら複数順番に指定してあげれば良さそうです。

最後の引数に元の変数を指定すれば良いです。

$tmp_hoge_array = [];
$tmp_foo_array  = [];

foreach ( $array as $key => $row ) {
    $tmp_hoge_array[$key] = $row['hoge'];
    $tmp_foo_array[$key]  = $row['foo'];
}

array_multisort($tmp_hoge_array, SORT_ASC, SORT_STRING,
                $tmp_foo_array, SORT_DESC, SORT_NUMERIC,
                $array);
unset($tmp_hoge_array);
unset($tmp_foo_array);

結果

array(3) {
  [0] =>
  array(2) {
    'hoge' =>
    string(5) "apple"
    'foo' =>
    int(3)
  }
  [1] =>
  array(2) {
    'hoge' =>
    string(3) "pen"
    'foo' =>
    int(2)
  }
  [2] =>
  array(2) {
    'hoge' =>
    string(9) "pineapple"
    'foo' =>
    int(1)
  }
}
array_multisort($tmp_hoge_array, SORT_ASC, SORT_STRING, $array);

全部指定しなくてもいい。


Viewing all articles
Browse latest Browse all 16

Latest Images

Trending Articles





Latest Images