Single074
Новичок
Есть такая проблемма, пытаюсь отсортировать многомерный массив с помощью array_multisort, но так как колличество параметров не известно то использую call_user_func_array('array_mu ltisort', $params);
Сортировка проходит, все хорошо, но не получается задать направления (SORT_ASC,SORT_DESC). Т.е. если $params[1] идет типа string, то он просит дать ему "array or a sort flag". Причем массив должен быть той же мерности, что и массивы данных, иначе ругается ( Array sizes are inconsistent). Но если дать ему массив той же мерности, то ошибок нет, но и напраления сортировки тоже нет.
Собственно вопрос, как таки задать напраление сортировки с помощью аргумента для вызова через call_user_func_array('array_mu ltisort', $params); ?
Сортировка проходит, все хорошо, но не получается задать направления (SORT_ASC,SORT_DESC). Т.е. если $params[1] идет типа string, то он просит дать ему "array or a sort flag". Причем массив должен быть той же мерности, что и массивы данных, иначе ругается ( Array sizes are inconsistent). Но если дать ему массив той же мерности, то ошибок нет, но и напраления сортировки тоже нет.
Собственно вопрос, как таки задать напраление сортировки с помощью аргумента для вызова через call_user_func_array('array_mu ltisort', $params); ?
PHP:
function get_fields($data, $order_by) {
$order_row = preg_split("/[\s,]+/", $order_by);
for ($i=0;$i<count($order_row);$i++) {
foreach ($data as $key => $row) {
$tmp[$i][$key] = $row[$order_row[$i]];
}
}
return $tmp;
}
function ordering($data, $order_by) {
$tmp = get_fields($data, $order_by);
$params = array();
foreach($tmp as &$t){
$params[] = &$t;
}
$params[1] = array("SORT_DESC","SORT_DESC","SORT_DESC","SORT_DESC"); // like that no warning but no sorting
$params[] = &$data;
call_user_func_array('array_multisort', $params);
return array_pop($params);
}
$data = array (
array('id' => 1,'name' => 'Barack','city' => 9),
array('id' => 7,'name' => 'boris','city' => 2),
array('id' => 3,'name' => 'coris','city' => 2),
array('id' => 3,'name' => 'coris','city' => 2)
);
$order_by = "city desc, name";
echo "<br>ORDER BY $order_by<br>";
$ordered = ordering($data, $order_by);
echo "<pre>";
var_dump($ordered);
echo "</pre>";