php - 递归 ksort : not sort the array

标签 php php-5.3 php-5.5 ksort

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

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提到,你可以做的是通过你的 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 是在其函数定义中使用按引用传递的函数示例。

如果您强烈反对使用按引用传递,则必须修改您的代码以将您的变量/数组返回到调用范围,然后您可以在其中更新您的数组。

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

关于php - 递归 ksort : not sort the array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37729890/

相关文章:

php - 检查数据库中是否存在电子邮件?

php - 什么是 ? : in PHP 5. 3?

php - 闭包中的后期静态绑定(bind) PHP5.5 vs 5.6

php - ubuntu php 5.5.38 升级到 5.5.9

php - 无法在 Yii2 中使用 dropDownList 取消设置外键值

php - 我应该对这个 xml 数据使用什么持久层(xml 或 mysql)?

php - 如何使用php将mysql数据导出到xml

php - 升级到 PHP5.5 时 Wordpress 崩溃

php - Mysql:更新全部还是先选择然后更新?

php - .htaccess 重写托管在 Bitnami/EC2 上的 Wordpress 主机