首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归ksort :不对数组排序

递归ksort :不对数组排序
EN

Stack Overflow用户
提问于 2016-06-09 15:12:21
回答 1查看 2.7K关注 0票数 2

我有一个问题,所以我有一个数组:

代码语言:javascript
复制
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
            )
)

我想按键对递归进行排序。因此,我创建了一个方法:

代码语言:javascript
复制
 public function sortNestedArrayAssoc($a)
{
    if (!is_array($a)) {
        return false;
    }
    ksort($a);
    foreach ($a as $k=>$v) {
        $this->sortNestedArrayAssoc($a[$k]);
    }
    return true;
}

但是我得到了同样的结果,键23的数组是第一个,我真的不明白问题在哪里。你能帮帮我吗?提前为我的英语道歉

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-09 15:18:39

正如约翰斯特林提到的,您可以做的事情是传递您的引用论点。可以通过在方法参数中使用&运算符来实现这一点。这样做的语法是(唯一的更改是第一行):

代码语言:javascript
复制
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是一个函数的例子,它在函数定义中使用了传递引用。

如果强烈反对使用,则必须修改代码以将变量/数组返回到调用作用域,然后更新数组。

代码语言:javascript
复制
public function sortNestedArrayAssoc($a)
{
    if (is_array($a)) {
        ksort($a);
        foreach ($a as $k=>$v) {
            $a[$k] = $this->sortNestedArrayAssoc($v);
        }
    }
    return $a;
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37729890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档