Как я могу глубоко сортировать многомерный массив и хранить их ключи?
$array = [ '2' => [ 'title' => 'Flower', 'order' => 3 ], '3' => [ 'title' => 'Rock', 'order' => 1 ], '4' => [ 'title' => 'Grass', 'order' => 2 ] ]; foreach ($array as $key => $row) { $items[$key] = $row['order']; } array_multisort($items, SORT_DESC, $array); print_r($array);
результат:
Array ( [0] => Array ( [title] => Flower [order] => 3 ) [1] => Array ( [title] => Grass [order] => 2 ) [2] => Array ( [title] => Rock [order] => 1 ) )
Что я за:
Array ( [2] => Array ( [title] => Flower [order] => 3 ) [4] => Array ( [title] => Grass [order] => 2 ) [3] => Array ( [title] => Rock [order] => 1 ) )
Есть идеи?
Возможно, это то, что вы ищете: онлайн-пример
Храните ключи массива, сортируйте их со столбцом заказа и снова объедините их.
$keys = array_keys($array); array_multisort( array_column($array, 'order'), SORT_DESC, SORT_NUMERIC, $array, $keys ); $array = array_combine($keys, $array); echo '<pre>'; print_r($array);
Вы можете попробовать uasort :
uasort($array, function ($a, $b) { return $b['order'] - $a['order']; });
Ваш код:
<?php $array = [ '2' => [ 'title' => 'Flower', 'order' => 3 ], '3' => [ 'title' => 'Rock', 'order' => 1 ], '4' => [ 'title' => 'Grass', 'order' => 2 ] ]; uasort($array, function ($a, $b) { return $b['order'] - $a['order']; }); print_r($array);
демонстрация