PHP 把数据转化为树形结构
- 只需要单个字段
转化前
array(2) {
[0] => array(7) {
["id"] => int(1)
["cid"] => int(1)
["user_id"] => int(1)
["create_time"] => string(1) "1"
["content"] => string(6) "测试"
["pid"] => int(0)
["beid"] => int(1)
}
[1] => array(7) {
["id"] => int(2)
["cid"] => int(1)
["user_id"] => int(1)
["create_time"] => string(1) "1"
["content"] => string(9) "测试啊"
["pid"] => int(1)
["beid"] => int(1)
}
}
代码
/**
* 树形结构(只要单个字段和id)
* @param $list 数组
* @param string $id 数据表的id名称
* @param string $pid 父ID
* @param string $name 单个字段(这里以content为例)
* @return array|mixed
*/
function tree($list, $id = 'id', $pid = 'pid', $name = 'content')
{
$data = [];
foreach ($list as $row) {
$data[$row[$id]][$name] = $row[$name];
$data[$row[$pid]]['children'][$row[$id]] = &$data[$row[$id]];
}
return isset($data[0]['children']) ? $data[0]['children'] : [];
}
转化的结果示例为
array(1) {
[1] => array(2) {
["content"] => string(6) "测试"
["children"] => array(1) {
[2] => array(1) {
["content"] => string(9) "测试啊"
}
}
}
}
2.需要转化所有数据
转化前
array(2) {
[0] => array(7) {
["id"] => int(1)
["cid"] => int(1)
["user_id"] => int(1)
["create_time"] => string(1) "1"
["content"] => string(6) "测试"
["pid"] => int(0)
["beid"] => int(1)
}
[1] => array(7) {
["id"] => int(2)
["cid"] => int(1)
["user_id"] => int(1)
["create_time"] => string(1) "1"
["content"] => string(9) "测试啊"
["pid"] => int(1)
["beid"] => int(1)
}
}
代码
/**
* 树形结构(所有数据)
* @param $list 数组
* @param string $id id名称
* @param string $pid 父级id
* @param string $child 数组分类后,子数组的名称
* @param int $root 一级分类父ID
* @return array
*/
function list_to_tree($list, $id = 'id', $pid = 'pid', $child = '_child', $root = 0)
{
// 创建Tree
$tree = array();
if (is_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data) {
$refer[$data[$id]] =& $list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[] =& $list[$key];
} else {
if (isset($refer[$parentId])) {
$parent =& $refer[$parentId];
$parent[$child][] =& $list[$key];
}
}
}
}
return $tree;
}
转化结果示例为
array(1) {
[0] => array(8) {
["id"] => int(1)
["cid"] => int(1)
["user_id"] => int(1)
["create_time"] => string(1) "1"
["content"] => string(6) "测试"
["pid"] => int(0)
["beid"] => int(1)
["_child"] => array(1) {
[0] => array(7) {
["id"] => int(2)
["cid"] => int(1)
["user_id"] => int(1)
["create_time"] => string(1) "1"
["content"] => string(9) "测试啊"
["pid"] => int(1)
["beid"] => int(1)
}
}
}
}