Я пытаюсь сделать то же самое, что и запрос MySQL
SELECT * FROM table ORDER BY field1, field2, ...
но с php и многомерным массивом:
$Test = array(
array("a"=>"004", "n"=>"03"),
array("a"=>"003", "n"=>"02"),
array("a"=>"001", "n"=>"02"),
array("a"=>"005", "n"=>"01"),
array("a"=>"001", "n"=>"01"),
array("a"=>"004", "n"=>"02"),
array("a"=>"003", "n"=>"01"),
array("a"=>"004", "n"=>"01")
);
function msort(&$array, $keys){
array_reverse($keys);
foreach($keys as $key){
uasort($array, sortByKey);
}
//
function sortByKey($A, $B){
global $key;
$a = $A[$key];
$b = $B[$key];
if($a==$b) return 0;
return ($a < $b)? -1 : 1 ;
}
}
//
msort($Test, array("a","n"));
//
foreach($Test as $t){
echo('<p>'.$t["a"].'-'.$t["n"].'</p>');
}
Моя теория такова: если я несколько раз отсортирую столбцы с «меньшей важностью», а затем столбцы с «большей важностью», я получу порядок, подобный приведенному выше запросу MySQL.
К сожалению, php возвращает:
Предупреждение: uasort() ожидает, что параметр 2 будет допустимым обратным вызовом, функция sortByKey не найдена или недопустимое имя функции в /Library/WebServer/Documents/www/teste.array_sort.php в строке 23" (строка uasort)
Это простая функция заказа. Что мне не хватает?
usort
по ключуa
, а затем сноваusort
по ключуn
, вы не получитеORDER BY a, n
, вы просто получите эквивалентORDER BY n
. Один сорт не уточняет предыдущий. - person deceze♦   schedule 03.04.2014