我有一个问题,所以我有一个数组:
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的数组是第一个,我真的不明白问题在哪里。你能帮帮我吗?提前为我的英语道歉
发布于 2016-06-09 15:18:39
正如约翰斯特林提到的,您可以做的事情是传递您的引用论点。可以通过在方法参数中使用&运算符来实现这一点。这样做的语法是(唯一的更改是第一行):
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;
}https://stackoverflow.com/questions/37729890
复制相似问题