у меня вопрос
Итак, у меня есть этот массив:
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
это первое, и я не понимаю, в чем проблема. Не могли бы вы мне помочь ? Спасибо заранее и извините за мой английский
Как Джон Стерлинг упомянуто, что вы могли бы сделать, чтобы передать аргументы по ссылке. Вы можете сделать это с помощью &
оператор в аргументе вашего метода. Синтаксис для этого будет (с единственным изменением в первой строке):
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;
}
Других решений пока нет …