PHP:将list列表转为tree树形数据

简介: PHP:将list列表转为tree树形数据

采用递归将数据列表转换成树


$list = [
    ["id" => 1, "name" => "头条", "parent_id" => 0],
    ["id" => 2, "name" => "快讯", "parent_id" => 0],
    ["id" => 3, "name" => "情感", "parent_id" => 2],
    ["id" => 4, "name" => "成人", "parent_id" => 3]
];


/**
 * 采用递归将数据列表转换成树
 *
 * @param $dataArr           数据列表
 * @param int $rootId        根节点ID
 * @param string $pkName     主键名
 * @param string $pIdName    父节点id名
 * @param string $childName  子节点名称
 * @return array
 */
function ListToTreeRecursive($dataArr, $rootId = 0, $pkName = 'id', $pIdName = 'parent_id', $childName = 'children')
{
    $arr = [];
    foreach ($dataArr as $sorData) {
        if ($sorData[$pIdName] == $rootId) {
            $children = ListToTreeRecursive($dataArr, $sorData[$pkName]);
            if($children){
                $sorData[$childName] = $children;
            }
            $arr[] = $sorData;
        }
    }
    return $arr;
}
$tree = ListToTreeRecursive($list);
echo json_encode($tree, JSON_UNESCAPED_UNICODE);
[
    {
        "id":1,
        "name":"头条",
        "parent_id":0
    },
    {
        "id":2,
        "name":"快讯",
        "parent_id":0,
        "children":[
            {
                "id":3,
                "name":"情感",
                "parent_id":2,
                "children":[
                    {
                        "id":4,
                        "name":"成人",
                        "parent_id":3
                    }
                ]
            }
        ]
    }
]

参考

PHP List数据集/数组转换成树状结构Tree

相关文章
|
10天前
|
XML 存储 JavaScript
DOM 节点列表(Node List)
XML DOM允许访问XML文档的每个节点,提供三种访问方法:getElementsByTagName()、循环遍历和导航节点关系。getElementsByTagName()返回一个节点列表,类似于数组,可用于获取特定标签名的节点。例如,加载"books.xml"后,`xmlDoc.getElementsByTagName("title")`会获取所有<title>元素,存储在变量x中。通过索引如x[2]可访问第三个<title>元素,注意索引从0开始。后续章节将进一步探讨节点列表(Node List)。
|
1天前
|
JavaScript
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的长度,允许遍历和处理节点。例如,加载"books.xml"到`xmlDoc`,通过`getElementsByTagName("title")`获取所有标题节点,然后使用循环输出每个<title>元素的文本内容。
|
5天前
|
监控 PHP Python
1688快速获取整店铺列表 采集接口php Python
在电子商务的浪潮中,1688平台作为中国领先的批发交易平台,为广大商家提供了一个展示和销售商品的广阔舞台;然而,要在众多店铺中脱颖而出,快速获取商品列表并进行有效营销是关键。
|
5天前
|
XML 数据格式
节点列表长度(Node List Length)
`NodeList`对象自动更新,其`length`属性表示列表中节点数量。例如,加载"books.xml"后,`getElementsByTagName('title').length`返回`4`。此属性可用来遍历列表,如示例所示,遍历所有`<title>`元素并打印其文本内容:Everyday Italian, Harry Potter, XQuery Kick Start, Learning XML。
|
6天前
|
Python
【Python 基础】列表(list)和元组(tuple)有什么区别?
【5月更文挑战第6天】【Python 基础】列表(list)和元组(tuple)有什么区别?
|
6天前
|
XML 数据格式
节点列表长度(Node List Length)
`Node List`对象自动更新,其`length`属性表示列表中节点数量。在给定示例中,代码加载"books.xml",并利用`getElementsByTagName('title')`获取<title>元素的数量,结果为4。`length`也可用于遍历列表,如示例所示,遍历并打印所有<title>元素的文本内容:Everyday Italian, Harry Potter, XQuery Kick Start, Learning XML。
|
9天前
|
XML JavaScript 数据格式
DOM 节点列表长度(Node List Length)
`length`属性用于获取DOM节点列表的长度,例如在XML文档中,通过`getElementsByTagName()`获取的所有`<title>`元素的数量。可以遍历这个列表,如示例所示,使用`for`循环访问并输出每个节点的文本值。在提供的实例中,代码加载"books.xml",然后获取并打印所有<title>元素的子节点值。
|
19天前
|
存储 索引 Python
多数pythoneer只知有列表list却不知道python也有array数组
多数pythoneer只知有列表list却不知道python也有array数组
26 0
|
22天前
四种解决”Arg list too long”参数列表过长的办法
这些方法都可以帮助你避免因参数列表过长而导致的错误。选择方法取决于具体情况和需求。
12 0
|
26天前
|
索引 容器
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数