递归 ksort :不对数组进行排序
Recursive ksort : not sort the array
我有一个问题
所以我有这个数组:
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
的数组是第一个,我真的不明白问题出在哪里。你能帮我吗 ?提前致谢,对不起我的英语
作为John Stirling mentioned, something you could do would be to pass your arguments by reference。您可以通过在方法参数中使用 &
运算符来执行此操作。语法是(唯一的变化是第一行):
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
是在其函数定义中使用按引用传递的函数示例。
如果您强烈反对使用按引用传递,则必须将代码修改为 return 您的 variable/array 到调用范围,然后在其中更新您的数组。
public function sortNestedArrayAssoc($a)
{
if (is_array($a)) {
ksort($a);
foreach ($a as $k=>$v) {
$a[$k] = $this->sortNestedArrayAssoc($v);
}
}
return $a;
}
我有一个问题 所以我有这个数组:
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
的数组是第一个,我真的不明白问题出在哪里。你能帮我吗 ?提前致谢,对不起我的英语
作为John Stirling mentioned, something you could do would be to pass your arguments by reference。您可以通过在方法参数中使用 &
运算符来执行此操作。语法是(唯一的变化是第一行):
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
是在其函数定义中使用按引用传递的函数示例。
如果您强烈反对使用按引用传递,则必须将代码修改为 return 您的 variable/array 到调用范围,然后在其中更新您的数组。
public function sortNestedArrayAssoc($a)
{
if (is_array($a)) {
ksort($a);
foreach ($a as $k=>$v) {
$a[$k] = $this->sortNestedArrayAssoc($v);
}
}
return $a;
}