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

现有树形数组结构如下

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

阅读 3.2k
2 个回答
   $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;
}


你这个代码的逻辑,当存在子集的时候,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)
)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题