微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

嵌套数组第三层正在消失

如何解决嵌套数组第三层正在消失

解决您的问题,您需要正确地理解PHP中变量引用/别名的工作方式。

看下面的示例代码,它看起来与您的代码没有太大不同,但是利用引用来访问任何父对象,即使它已经“移动”了:

# transform $flat into a tree:
foreach($flat as $id => &$value)
{
    # check if there is a parent
    if ($parentId = $value['parent'])
    {
        $flat[$parentId][0][$id] =& $value; # add child to parent
        unset($flat[$id]); # remove reference from topmost level
    }
}
unset($value); # remove iterator reference
print_r($flat); # your tree

$flat现在包含$flat- 中的所有值,但已重新排序。

解决方法

我有那个数组:

$a = array(
    "7" => array(
        "id" => 7,"parent" => 6
    ),"6" => array(
        "id" => 6,"parent" => 5
    ),"5" => array(
        "id" => 5,"parent" => 4
    ),"4" => array(
        "id" => 4,"parent" => 0
    ),"3" => array(
        "id" => 7,"parent" => 2
    ),"2" => array(
        "id" => 7,"parent" => 1
    ),"1" => array(
        "id" => 7,"parent" => 0
    )
);

我想要的结果是:

$a = array(
    "4" => array(
        "id" => 4,"parent" => 0,array(
            "5" => array(
                "id" => 5,"parent" => 4,array(
                    "6" => array(
                        "id" => 6,"parent" => 5,array(
                            "7" => array(
                                "id" => 7,"parent" => 6
                            )
                        )
                    )
                )
            )
        )
    ),"parent" => 1,array(
            "3" => array(
                "id" => 7,"parent" => 2
            )
        )
    ),"parent" => 0
    )
);

我使用的代码是这样的:

foreach($a as $v)
{
    if(isset($a[$v['PARENT']]))
    {
        $a[$v['PARENT']][$v['ID']] = $v;
        unset($a[$v['ID']]);
    }
}

我的问题是我得到了那个结果:

$a = array(
    "4" => array(
        "id" => 4,"parent" => 4
            )
        )
    ),"parent" => 0
    )
);

而不是需要它的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。