Здравствуйте.
Вот массив:
$test = [
[
'date' => '1',
'message' => 'Первый'
],
[
'date' => '3',
'message' => '1 Третий'
],
[
'date' => '2',
'message' => 'Второй'
],
[
'date' => '3',
'message' => '0 Четвертый'
],
[
'date' => '0',
'message' => 'Нулевой'
]
];
Должен стать таким:
$test = [
[
'date' => '0',
'message' => 'Нулевой'
],
[
'date' => '1',
'message' => 'Первый'
],
[
'date' => '2',
'message' => 'Второй'
],
[
'date' => '3',
'message' => '1 Третий'
],
[
'date' => '3',
'message' => '0 Четвертый'
]
];
Решение
array_multisort($test) сортирует по
message в том числе, а это не нужно:
$test = [
[
'date' => '0',
'message' => 'Нулевой'
],
[
'date' => '1',
'message' => 'Первый'
],
[
'date' => '2',
'message' => 'Второй'
],
[
'date' => '3',
'message' => '0 Четвертый'
],
[
'date' => '3',
'message' => '1 Третий'
]
];
Вот так сортирует правильно, но намного медленнее:
function cmp($a, $b) {
$a = $a['date'];
$b = $b['date'];
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
uasort($test, 'cmp');
Решения с перезаписью значений в ключи и обработка через
ksort() работают тоже быстро, но теряют массивы с одинаковыми значениями.
Мне бы что-нибудь такое же простое и быстрое, как
array_multisort(), но чтобы сортировка была только по одному значение.
Спасибо.