把
$arr = [
[
'id' => 1,
'pid' => 0
],
[
'id' => 2,
'pid' => 1
],
[
'id' => 3,
'pid' => 2
],
[
'id' => 4,
'pid' => 1
],
[
'id' => 5,
'pid' => 2
],
[
'id' => 6,
'pid' => 0
],
];
转化成
$result = [
1 => [2,3,4,5],
2 => [3,5],
3 => [],
4 => [],
5 => [],
6 => [],
];
这种格式 话不多说 上完整代码
<?php
// 把$arr 转化成 $result格式
$arr = [
[
'id' => 1,
'pid' => 0
],
[
'id' => 2,
'pid' => 1
],
[
'id' => 3,
'pid' => 2
],
[
'id' => 4,
'pid' => 1
],
[
'id' => 5,
'pid' => 2
],
[
'id' => 6,
'pid' => 0
],
];
$result = [
1 => [2,3,4,5],
2 => [3,5],
3 => [],
4 => [],
5 => [],
6 => [],
];
echo "<pre>";
/**
* 获取2级树形结构数据
*/
function getTree($data, $pId = 0, $clear = false)
{
// 声明静态变量
static $newData = array();
// 清楚上次的结果
if ($clear)
{
$newData = array();
}
if(empty($data))
{
return false;
}
foreach ($data as $key => $value) {
// 当为此id的子元素时
if ($value['pid'] == $pId)
{
// 存入子元素的id
$newData[] = $value['id'];
getTree($data, $value['id']);
}
}
return $newData;
}
/**
* 获取二级树结构
*/
function getTwoTree($arr = [])
{
$newArr = [];
foreach ($arr as $k => $v) {
// 每次找到一个id下的所有子id
$newArr[$v['id']] = getTree($arr, $v['id'], true);
}
return $newArr;
}
print_r(getTwoTree($arr));
die;
输出的结果
Array ( [1] => Array ( [0] => 2 [1] => 3 [2] => 5 [3] => 4 ) [2] => Array ( [0] => 3 [1] => 5 ) [3] => Array ( ) [4] => Array ( ) [5] => Array ( ) [6] => Array ( ) )