前提・実現したいこと
PHPで多次元配列の並び替えをしようとしています。
以下のような配列があるとして、'count'で降順にしたうえで、さらに任意の要素だけ先頭に配置したいです。
array ( 1 => array ( 'id' => 1, 'title' => '東京都', 'city' => array ( 0 => array ( 'id' => '1001', 'title' => '中央区', 'count' => 300, ), 1 => array ( 'id' => '1002', 'title' => '港区', 'count' => 150, ), 2 => array ( 'id' => '1003', 'title' => '新宿区', 'count' => 430, ), 3 => array ( 'id' => '1004', 'title' => '渋谷区', 'count' => 170, ), 4 => array ( 'id' => '1005', 'title' => '品川区', 'count' => 260, ), 5 => array ( 'id' => '1006', 'title' => '千代田区', 'count' => 200, ), ), ), )
countでのソートはできています。
array_multisort(array_column($list[1]['city'], 'count'), SORT_DESC, $list[1]['city']); array ( 1 => array ( 'id' => 1, 'title' => '東京都', 'city' => array ( 0 => array ( 'id' => '1003', 'title' => '新宿区', 'count' => 430, ), 1 => array ( 'id' => '1001', 'title' => '中央区', 'count' => 300, ), 2 => array ( 'id' => '1005', 'title' => '品川区', 'count' => 260, ), 3 => array ( 'id' => '1006', 'title' => '千代田区', 'count' => 200, ), 4 => array ( 'id' => '1004', 'title' => '渋谷区', 'count' => 170, ), 5 => array ( 'id' => '1002', 'title' => '港区', 'count' => 150, ), ), ), )
そのうえで、任意の項目(例:千代田区、港区)を先頭に持っていきたいです。
array ( 1 => array ( 'id' => 1, 'title' => '東京都', 'city' => array ( 0 => array ( 'id' => '1006', 'title' => '千代田区', 'count' => 200, ), 1 => array ( 'id' => '1002', 'title' => '港区', 'count' => 150, ), 2 => array ( 'id' => '1003', 'title' => '新宿区', 'count' => 430, ), 3 => array ( 'id' => '1001', 'title' => '中央区', 'count' => 300, ), 4 => array ( 'id' => '1005', 'title' => '品川区', 'count' => 260, ), 5 => array ( 'id' => '1004', 'title' => '渋谷区', 'count' => 170, ), ), ), )
試したこと
$sort = [1006, 1002]; uasort($list[1]['city'], function($x, $y) use ($sort){ return array_search($x["id"],$sort)>array_search($y["id"],$sort); });
この方法だと、1006は先頭に出せても、1002番は見当違いなところに飛んでってしまいました。
知恵をお借りしたいです。宜しくお願いします。