Вот мой текущий код, использующий php 7.1.20-1+ubuntu18.04.1+deb.sury.org+1: (Четыре столбца для сортировки, 5-й столбец просто номер подмассива.)
$dud = [[2,3,"2018-07-19","08:23",1],
[2,3,"2018-07-19","08:30",2],
[2,1,"2018-07-19","08:14",3],
[2,4,"2018-07-19","07:11",4],
[2,1,"2018-07-19","07:17",5],
[2,9,"2018-07-19","07:31",6],
[2,4,"2018-07-19","05:06",7],
[2,6,"2018-07-18","08:10",8],
[2,9,"2018-07-19","07:20",9],
[1,7,"2018-07-19","08:27",10],
[1,5,"2018-07-19","08:11",11],
[1,7,"2018-07-18","08:22",12],
[1,5,"2018-07-19","08:09",13],
[2,6,"2018-07-18","07:12",14],
[1,7,"2018-07-18","08:21",15],
[1,7,"2018-07-19","07:09",16]];
usort($dud, function($a,$b){if ($a[3] !== $b[3]){return strcmp($a[3],$b[3]);}});
usort($dud, function($a,$b){if ($a[2] !== $b[2]){return strcmp($a[2],$b[2]);}});
// usort($dud, function($a,$b){if ($a[1] !== $b[1]){return $a[1] - $b[1];}});
usort($dud, function($a,$b){if ($a[1] !== $b[1]){return strcmp($a[1],$b[1]);}});
// usort($dud, function($a,$b){if ($a[0] !== $b[0]){return $a[0] - $b[0];}});
usort($dud, function($a,$b){if ($a[0] !== $b[0]){return strcmp($a[0],$b[0]);}});
foreach($dud as $output){
foreach($output as $output2){
echo " $output2 ";
}
echo "<br/>";
}
Я пытаюсь отсортировать 16 подмассивов, сначала по 4-му столбцу, затем по 3-му столбцу, затем по 2-му, затем по 1-му. Мой вывод:
1 5 2018-07-19 08:09 13
1 5 2018-07-19 08:11 11
1 7 2018-07-18 08:21 15
1 7 2018-07-18 08:22 12
1 7 2018-07-19 07:09 16
1 7 2018-07-19 08:27 10
2 1 2018-07-19 08:14 3
2 1 2018-07-19 07:17 5
2 3 2018-07-19 08:23 1
2 3 2018-07-19 08:30 2
2 4 2018-07-19 07:11 4
2 4 2018-07-19 05:06 7
2 6 2018-07-18 08:10 8
2 6 2018-07-18 07:12 14
2 9 2018-07-19 07:20 9
2 9 2018-07-19 07:31 6
Как есть, в выходных данных не по порядку подмассивы 3 и 5 (07:17 должно быть до 08:14), подмассивы 4 и 7 не по порядку (05:06 должно быть до 07:11) и подмассивы 8 и 14 вышли из строя (07:12 должно быть до 08:10). Комментируя различные строки usort, он сортирует четвертый столбец просто отлично, а все остальные строки usort закомментированы. Сортировка только столбцов 1 и 4 работает нормально. Сортировка только столбцов 2 и 4, подмассивы 3 и 5 не по порядку (07:17 должно быть раньше 8:14). Сортируем только столбцы 3 и 4, подмассивы 8 и 14 не по порядку (07:12 должно быть раньше 08:10). Есть идеи, что здесь происходит? Я пытался использовать информацию, доступную по адресу: PHP Sort Array By SubArray Value но в четвертой колонке все еще получаешь причудливую чудаковатую миссорт. Спасибо большое!!
array_multisort()
или the-art-of-web.com/php/sortarray/#section_3, если вы хотите продолжить сusort()
- person MonkeyZeus   schedule 03.08.2018