PHP array_multisort – как сохранить значения ключа?

Как я могу глубоко сортировать многомерный массив и хранить их ключи?

$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 ) ) 

Есть идеи?

Solutions Collecting From Web of "PHP array_multisort – как сохранить значения ключа?"

Возможно, это то, что вы ищете: онлайн-пример

Храните ключи массива, сортируйте их со столбцом заказа и снова объедините их.

 $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); 

демонстрация