rubyのsort_byはめっちゃ便利。マジで
ary = [{id: 2,name:"hoge"},{id: 3,name:"hoge"},{id: 1,name:"hoge"}] p ary.sort_by { |_| _[:id] } => [{:id=>1, :name=>"hoge"}, {:id=>2, :name=>"hoge"}, {:id=>3, :name=>"hoge"}]
ぜひこんなメソッドがPHPにあればなぁ(希望的観測)で検索したらやっぱりなかった
ってことでPHPのメソッドでsort_by
的な連想配列内の値でソートしてみる
PHP 5.5以降
<?php // 連想配列のValueでソートしたい $array[] = ["id"=>4, "name"=>"Hoge"]; $array[] = ["id"=>3, "name"=>"Piyo"]; $array[] = ["id"=>2, "name"=>"Fuga"]; $array[] = ["id"=>1, "name"=>"Foo"]; array_multisort(array_column($array, 'id'), SORT_ASC, $array); print_r($array); ?>
PHP 5.3以降
<?php // 連想配列のValueでソートしたい $array[] = ["id"=>4, "name"=>"Hoge"]; $array[] = ["id"=>3, "name"=>"Piyo"]; $array[] = ["id"=>2, "name"=>"Fuga"]; $array[] = ["id"=>1, "name"=>"Foo"]; array_multisort(array_map(function ($i) { return $i['id']; }, $array), SORT_ASC, $array);
array_map()やarray_column()すら使えない環境下の場合は最悪usort
が使える
usort($array, function ($a, $b) { return $a['id'] - $b['id']; });