Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 操作嵌套多维数组_Php_Multidimensional Array_Nested - Fatal编程技术网

Php 操作嵌套多维数组

Php 操作嵌套多维数组,php,multidimensional-array,nested,Php,Multidimensional Array,Nested,我有一个“链表”,这个PHP数组是所有节点的列表。我已经使用密钥来存储唯一的mysql ID,以便以后查找。 您会注意到,第二级数组中的某些键与第一级数组中的键相同。我希望连接这些数组,以便以递归方式将较低级别连接到较高级别 例如,179->181->192->194 可能有许多节点级别,而不仅仅是我在本例中所看到的。 如何递归地将所有节点添加到正确的顺序中 更新我还有一个节点上所有端点的数组,即没有其他节点的ID 排列 ( [0] => 178 [1] => 180 [2] => 182 [3

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

例如,179->181->192->194

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

更新我还有一个节点上所有端点的数组,即没有其他节点的ID

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

我不确定这是您想要的,我相信有很多更有效的方法可以做到这一点。但这里有一个镜头:

给出上面提到的输入示例

此代码:

Array
(

    [178] => Array
        (
        )

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

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

    [186] => Array
        (
        )

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

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

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

)
像这样跑:

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;
}
提供以下输出:

$list2 = nest_list($list);
print_r($list2);

再一次。。。一大堆代码,但我认为这会让你更接近你的目标。

我怀疑一个更好的数据库查询可以检索到你想要的数据,而不必在phpy中重做它。你可以使用递归函数来完成该任务。第二级中的哪些节点与第一级相同?节点的末尾是什么?确定这就是结局吗?我们可以确定…@bensiu我已经更新了问题,显示了一个包含所有节点端的数组。Homer6我想我需要一个函数来搜索哪些节点具有相同的ID,然后相应地加入它们
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] => 
        )
)