351 文字
2 分
PHP:配列の中身がオブジェクトの場合に array_multisort で複数の値をソートする

PHPで「配列の中身がオブジェクト」の場合にarray_multisortを使って複数の値でソートしたい場合、まずソート対象のプロパティごとに配列を作成し、それを基準にarray_multisortを利用します。ただし、array_multisortは連想配列やオブジェクトには直接使えないため、array_columnやループで値を抽出する必要があります。


サンプル#

たとえば、オブジェクト配列 $usersage 昇順→score 降順でソートしたい場合:

$users = [
(object)['name' => 'Tanaka', 'age' => 25, 'score' => 80],
(object)['name' => 'Suzuki', 'age' => 22, 'score' => 90],
(object)['name' => 'Yamada', 'age' => 25, 'score' => 70],
(object)['name' => 'Sato', 'age' => 22, 'score' => 80],
];
// 各プロパティごとに配列を作成
$ages = [];
$scores = [];
foreach ($users as $user) {
$ages[] = $user->age;
$scores[] = $user->score;
}
// array_multisortでソート
array_multisort($ages, SORT_ASC, $scores, SORT_DESC, $users);
// $usersが希望の順序に並び替えられる

この方法で、$users自体が並び替えられます


ポイント#

  • array_multisortは値参照渡しなので、元の配列が直接並び替えられます。
  • ソート基準となる各プロパティの配列を先に作成する必要があります。
  • オブジェクト配列でも、プロパティごとの配列を作ればarray_multisortが使えます。

まとめ#

  1. ソート基準ごとに値の配列を作成
  2. array_multisortで基準配列+元配列を一緒にソート

この手法で、オブジェクト配列もarray_multisortで複数条件ソートできます。