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

查看:123
本文介绍了算法 - 请问php然后把树形数组回溯成一维数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

现有树形数组结构如下

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

需要一维数组结构如下

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

解决方案

   $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;
}


这篇关于算法 - 请问php然后把树形数组回溯成一维数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆