php - 重置多维数组中的数组键

标签 php arrays recursion

我一直在四处寻找解决方案,但没有真正成功。我有一个没有深度限制的 parent 和 child 的多维数组。这是从数据库生成的,但问题是项目 ID 成为键,使用我将平面数组排列成多维数组的方式,如下所示:

Array(

[28] => Array
        (
            [id] => 28
            [color] => #ff24e5
            [name] => Personal
            [parent_id] => 
            [children] => Array
                (
                    [23] => Array
                        (
                            [id] => 23
                            [color] => #41c3a3
                            [name] => Shopping
                            [parent_id] => 28
                            [children] => Array
                                (
                                    [22] => Array
                                        (
                                            [id] => 22
                                            [color] => #8be32b
                                            [name] => Deals
                                            [parent_id] => 23
                                            [children] => Array
                                                (
                                                )
                                        )
                                )
                        )

                    [150] => Array
                        (
                            [id] => 150
                            [color] => #e9a3f0
                            [name] => Orders
                            [parent_id] => 28
                            [children] => Array
                                (
                                )
                        )
                )
        )
)

我想要的是一个执行以下操作的函数:

Array (
[0] => Array
        (
            [id] => 28
            [color] => #ff24e5
            [name] => Personal
            [parent_id] => 
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 23
                            [color] => #41c3a3
                            [name] => Shopping
                            [parent_id] => 28
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 22
                                            [color] => #8be32b
                                            [name] => Deals
                                            [user_id] => 1
                                            [selected] => 0
                                            [parent_id] => 23
                                            [children] => Array
                                                (
                                                )
                                        )
                                )
                        )

                    [1] => Array
                        (
                            [id] => 150
                            [color] => #e9a3f0
                            [name] => Orders
                            [parent_id] => 28
                            [children] => Array
                                (
                                )
                        )
                )
        )
)

本质上是从 0 开始重新分配键。我尝试了很多方法,但我假设我需要找到一个递归解决方案,当我尝试这样做时,它破坏了我的数组。我正在阅读 array_walk_recursive() 函数,但我不太清楚除此之外还能做什么。本质上,有没有办法重置多维数组中的数字键?

感谢您的帮助!

最佳答案

你真的需要添加 is_numeric 条件来阻止文本键混淆......

function fix_keys($array) {

    foreach ($array as $k => $val) {

        if (is_array($val)) 
            $array[$k] = $fix_keys($val); //recurse
    }

    if( is_numeric($k) )
        return array_values($array);

    return $array;
}

我这样做了:

function fix_keys($array) {
    $numberCheck = false;
    foreach ($array as $k => $val) {
        if (is_array($val)) $array[$k] = fix_keys($val); //recurse
        if (is_numeric($k)) $numberCheck = true;
    }
    if ($numberCheck === true) {
        return array_values($array);
    } else {
        return $array;
    }
}

关于php - 重置多维数组中的数组键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990970/

相关文章:

javascript - php脚本执行倒计时

javascript - 在 VUE js 中获取数组中数据的索引

php - 路由冲突 Laravel

php - 查询前设置最后一个ID的值

javascript - 将对象插入数组会导致 TypeError

javascript - 如何按对象数组中的数组属性进行过滤

java - 如何在 Java 中正确实现填字游戏解算器

performance - 尾递归函数总是要避免吗?

c++ - 加速递归行列式算法

php - Yii 自定义路由在 nginx 中不起作用