请问php然后把树形数组回溯成一维数组?

发布于 2022-09-05 04:23:19 字数 1165 浏览 11 评论 0

现有树形数组结构如下

clipboard.png

需要把它回溯成一维数组以插入数据库

需要一维数组结构如下

array(
          1 => array('id'=>'1','parentid'=>0),
          2 => array('id'=>'2','parentid'=>0),
          3 => array('id'=>'3','parentid'=>1),
          4 => array('id'=>'4','parentid'=>1),
          5 => array('id'=>'5','parentid'=>2),
          6 => array('id'=>'6','parentid'=>3),
          7 => array('id'=>'7','parentid'=>3)
          );

我写成这样但不是想要的结果,求大佬更改,谢谢

private function _getOrderData($datas)
    {
        $_data = [];
        static $i = 0;
        foreach ($datas as $data) {
            $i++;
            $rows = ['id' => $data['id'], 'pid' => isset($data['children']) ? $data['id'] : 0, 'menu_order' => $i];
            if(isset($data['children'])) {
                $this->_getOrderData($data['children']);
            }
            $_data[] = $rows;
        }
        return $_data;
    }

3Q

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

岁月无声 2022-09-12 04:23:19
   $arr = array(
    1 => array('id' => '1', 'parentid' => 0),
    2 => array('id' => '2', 'parentid' => 0),
    3 => array('id' => '3', 'parentid' => 1),
    4 => array('id' => '4', 'parentid' => 1),
    5 => array('id' => '5', 'parentid' => 2),
    6 => array('id' => '6', 'parentid' => 3),
    7 => array('id' => '7', 'parentid' => 3)
);

$result = tree($arr);
var_dump($result);

function tree($array, $parentid = 0)
{
    $result = array();
    foreach ($array as $val) {
        if ($val["parentid"] == $parentid) {
            $indata = array("id" => $val["id"]);

            $chidrendata = tree($array, $val["id"]);
            if ($chidrendata) {
                $indata["children"] = $chidrendata;
            }
            $result[] = $indata;
        }
    }
    return $result;
}

$list = setlist($result);
var_dump($list);

function setlist($arr, $parentid = 0)
{
    $array = array();
    foreach ($arr as $val) {
        $indata = array("id" => $val["id"], "parentid" => $parentid);
        $array[] = $indata;
        if (isset($val["children"])) {
            $children = setlist($val["children"], $val["id"]);
            if ($children) {
                $array = array_merge($array, $children);
            }
        }
    }
    return $array;
}


沫雨熙 2022-09-12 04:23:19

你这个代码的逻辑,当存在子集的时候,idpid是一样的了?你确定是这样吗?

第二个疑问,为什么要从children搞这么复杂?直接针对parent搞数组不行?

array(
    1 => array('id'=>'1','childrebid'=>1),
    2 => array('id'=>'1','childrebid'=>2),
    3 => array('id'=>'1','childrebid'=>3),
    4 => array('id'=>'2','childrebid'=>4),
    5 => array('id'=>'2','childrebid'=>5),
    6 => array('id'=>'3','childrebid'=>6),
    7 => array('id'=>'3','childrebid'=>7)
)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文