首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >重置多维数组中的数组键

重置多维数组中的数组键
EN

Stack Overflow用户
提问于 2011-08-09 11:05:00
回答 4查看 11.2K关注 0票数 10

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

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

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

代码语言:javascript
复制
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()函数,但我不知道除此之外还能做什么。从本质上讲,有没有办法重置多维数组中的数字键?

谢谢你的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-09 11:11:19

代码语言:javascript
复制
function fix_keys($array) {
  foreach ($array as $k => $val) {
    if (is_array($val)) 
      $array[$k] = fix_keys($val); //recurse
  }
  return array_values($array);
}
票数 15
EN

Stack Overflow用户

发布于 2012-09-13 12:26:21

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

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

相反,我这样做了:

代码语言:javascript
复制
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;
    }
}
票数 18
EN

Stack Overflow用户

发布于 2012-03-02 20:44:24

我也在尝试解决同样的问题,下面是代码

代码语言:javascript
复制
$array = array_values($array);
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6990970

复制
相关文章

相似问题

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