Сортировка массива будет пытаться отсортировать каждый элемент против любого другого, поэтому вы не можете заставить usort
(который только дает вам значения) поддерживать первоначальный порядок элементов, даже если эти элементы равны.
Однако вы можете использовать uksort
, который также предоставит вам доступ к ключам (из исходного массива), что позволит вам вернуться к следующему:
uksort($mtx, function ($key1, $key2) use ($mtx) {
$a = $mtx[$key1];
$b = $mtx[$key2];
if ($a['num'] < $b['num']) {
return 1;
}
if ($a['num'] > $b['num']) {
return -1;
}
return $key1 - $key2;
});
Сокращенная форма:
uksort($mtx, function ($key1, $key2) use ($mtx) {
return $mtx[$key2]['num'] - $mtx[$key1]['num'] ?: $key1 - $key2;
});