Рекурсивный ксорт: не сортировать массив

у меня вопрос
Итак, у меня есть этот массив:

Array
(
[2016] => Array
(
[23] => Array
(
[total_auctions] => 0
[total_price] => 0
)

[22] => Array
(
[total_auctions] => 0
[total_price] => 0
)

[21] => Array
(
[total_auctions] => 0
[total_price] => 0
)

[20] => Array
(
[total_auctions] => 0
[total_price] => 0
)
)

Я хочу отсортировать рекурсив по ключу. Итак, я создаю метод:

 public function sortNestedArrayAssoc($a)
{
if (!is_array($a)) {
return false;
}
ksort($a);
foreach ($a as $k=>$v) {
$this->sortNestedArrayAssoc($a[$k]);
}
return true;
}

Но я получаю тот же результат, массив с ключом 23 это первое, и я не понимаю, в чем проблема. Не могли бы вы мне помочь ? Спасибо заранее и извините за мой английский

0

Решение

Как Джон Стерлинг упомянуто, что вы могли бы сделать, чтобы передать аргументы по ссылке. Вы можете сделать это с помощью & оператор в аргументе вашего метода. Синтаксис для этого будет (с единственным изменением в первой строке):

public function sortNestedArrayAssoc(&$a)
{
if (!is_array($a)) {
return false;
}
ksort($a);
foreach ($a as $k=>$v) {
$this->sortNestedArrayAssoc($a[$k]);
}
return true;
}

Это означает, что вы затем передаете переменную в свою функцию и модифицируете ее напрямую вместо того, что обычно делает PHP, то есть передает копию переменной в вашу функцию. ksort пример функции, которая использует передачу по ссылке в определении функции

Если вы были категорически против использования передачи по ссылке, вам пришлось бы изменить свой код, чтобы он возвращал вашу переменную / массив в область вызова, где вы затем обновляете свой массив.

public function sortNestedArrayAssoc($a)
{
if (is_array($a)) {
ksort($a);
foreach ($a as $k=>$v) {
$a[$k] = $this->sortNestedArrayAssoc($v);
}
}
return $a;
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]