首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作嵌套多维数组

问操作嵌套多维数组
EN

Stack Overflow用户
提问于 2011-11-14 02:45:51
回答 1查看 771关注 0票数 3
代码语言:javascript
复制
Array
(

    [178] => Array
        (
        )

    [179] => Array
        (
            [180] => 
            [181] => 
            [182] => 
            [183] => 
        )

    [184] => Array
        (
            [185] => 
        )

    [186] => Array
        (
        )

    [189] => Array
        (
            [190] => 
        )

    [181] => Array
        (
            [191] => 
            [192] => 
        )

    [192] => Array
        (
            [194] => 
        )

)

我有一个“链接列表”,这个PHP数组是所有节点的列表。我已经使用键来存储唯一的mysql ID,以便以后查找。您会注意到,第二级数组中的一些键与第一级相同。我想加入这些数组,以便以递归的方式将较低级别连接到较高级别。

179个-> 181 -> 192号-> 194

可能有许多节点级别,而不仅仅是我在本例中所拥有的。如何递归地将所有节点添加到正确的顺序中?

更新的I也有一个节点上所有端点的数组,即没有其他节点的ie。

阵列( => 178 1 => 180 2 => 182 3 => 183 4 => 185 5 => 186 6 => 190 7 => 191 8 => 194 )

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-14 04:10:51

我不确定这是你想要的,我相信有很多更有效的方法可以做到这一点。但这里有一次机会:

给出上面提到的输入示例。

此代码:

代码语言:javascript
复制
function index_nodes($nodes, &$index) {
    foreach($nodes as $key => $value) {
        if ($value) {
            $index[$key] = $value;
            index_nodes($value, $index);
        }
    }
}

function nest_list($list) {
    $index = array();
    index_nodes($list, $index);

    // Construct tree
    $build_tree = function(&$value, $key) use ($index, &$updated) {
        if(array_key_exists($key, $index)) {
            $value = $index[$key];
            $updated = true;
        }
    };

    // This needs done several times, since I can't be sure I nested things
    // in the perfect order.
    do {
        $updated = false;
        array_walk_recursive($list, $build_tree);
    } while($updated);

    return $list;
}

像这样跑:

代码语言:javascript
复制
$list2 = nest_list($list);
print_r($list2);

给出以下输出:

代码语言:javascript
复制
Array
(
    [178] => 
    [179] => Array
        (
            [180] => 
            [181] => Array
                (
                    [191] => 
                    [192] => Array
                        (
                            [194] => 
                        )
                )
            [182] => 
            [183] => 
        )
    [184] => Array
        (
            [185] => 
        )
    [186] => 
    [189] => Array
        (
            [190] => 
        )
    [181] => Array
        (
            [191] => 
            [192] => Array
                (
                    [194] => 
                )

        )
    [192] => Array
        (
            [194] => 
        )
)

再一次..。一堆代码,但我认为它能让你更接近你的目标。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8116745

复制
相关文章

相似问题

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