$arr = [
[
'id' => 1,
'name' => '软件开发',
'parent_id' => 0,
'total' => 5 + 6(属于他的节子点就是id =3 的total ) + 10(属于他的节子点就是id =4 的total )
],
[
'id' => 2,
'name' => '系统技术',
'parent_id' => 0,
'total' => 3 + 12(属于他的节子点就是id =5的total ) + 68(属于他的节子点就是id =6 的total )
],
[
'id' => 3,
'name' => 'PHP',
'parent_id' => 1,
'total' => 6
],
[
'id' => 4,
'name' => 'Javascript',
'parent_id' => 1,
'total' => 10
],
[
'id' => 5,
'name' => 'Windows10',
'parent_id' => 2,
'total' => 12
],
[
'id' => 6,
'name' => 'Windows7',
'parent_id' => 2,
'total' => 68
],
];想得到这样的结果,希望大神帮助下,,脑子都死了上亿个细胞了。。
$arr = [
[
'id' => 1,
'name' => '软件开发',
'parent_id' => 0,
'total' => 5
],
[
'id' => 2,
'name' => '系统技术',
'parent_id' => 0,
'total' => 3
],
[
'id' => 3,
'name' => 'PHP',
'parent_id' => 1,
'total' => 6
],
[
'id' => 4,
'name' => 'Javascript',
'parent_id' => 1,
'total' => 10
],
[
'id' => 5,
'name' => 'Windows10',
'parent_id' => 2,
'total' => 12
],
[
'id' => 6,
'name' => 'Windows7',
'parent_id' => 2,
'total' => 68
],
];
[
'id' => 1,
'name' => '软件开发',
'parent_id' => 0,
'total' => 5 + 6(属于他的节子点就是id =3 的total ) + 10(属于他的节子点就是id =4 的total )
],
[
'id' => 2,
'name' => '系统技术',
'parent_id' => 0,
'total' => 3 + 12(属于他的节子点就是id =5的total ) + 68(属于他的节子点就是id =6 的total )
],
[
'id' => 3,
'name' => 'PHP',
'parent_id' => 1,
'total' => 6
],
[
'id' => 4,
'name' => 'Javascript',
'parent_id' => 1,
'total' => 10
],
[
'id' => 5,
'name' => 'Windows10',
'parent_id' => 2,
'total' => 12
],
[
'id' => 6,
'name' => 'Windows7',
'parent_id' => 2,
'total' => 68
],
];想得到这样的结果,希望大神帮助下,,脑子都死了上亿个细胞了。。
$arr = [
[
'id' => 1,
'name' => '软件开发',
'parent_id' => 0,
'total' => 5
],
[
'id' => 2,
'name' => '系统技术',
'parent_id' => 0,
'total' => 3
],
[
'id' => 3,
'name' => 'PHP',
'parent_id' => 1,
'total' => 6
],
[
'id' => 4,
'name' => 'Javascript',
'parent_id' => 1,
'total' => 10
],
[
'id' => 5,
'name' => 'Windows10',
'parent_id' => 2,
'total' => 12
],
[
'id' => 6,
'name' => 'Windows7',
'parent_id' => 2,
'total' => 68
],
];
// 初始化数组
$tree = [];
// 判断数组不为空
if(!empty($arr)) {
// 新建一个数组初始化
$newArr = [];
// 遍历传递过来的变量数组$arr
foreach($arr as $key => $value){
// 以遍历得到的数组id为索引赋值给新数组$newArr
$newArr[$value['id']] = $value;
}
// 遍历新数组
foreach($newArr as $index => $item) {
// 判断数组指定作为顶级标识的字段是否等于遍历结果数组的值
if($pid == $item['parent_id']) {
// 遍历结果赋值给新数组$tree 这里加了个&是$tree的结果随着$newArr的值改变
$tree[] = &$newArr[[$item['id']];
// 判断$newArr[比如$item['parent_id']] != 0 就往下操作
} elseif(isset($newArr[$item['parent_id']])) {
// 计算指定数组key的值之和 这里的$newAr[$item['parent_id'] 实际上就是得到当前查询数组的父级id索引值 比如 $item['parent_id'] = 1 那这里就是$newArr[1]['total']
$newArr[$item['parent_id']]['total'] = $newArr[$item['parent_id']]['total'] + $newArr[$item['id']]['total'];
// 重新拼接数组
array_push($tree, $newArr[$item['io']]);
}
}
// 删除$newArr
unset($newArr);
// 返回结果
return $tree;
}
}
foreach ($arr as $key => $value) {
$result[$value['id']] = $value;
}
foreach ($arr as $key => $value) {
if($value['parent_id']==0){ //如果parent_id==0 则不做修改
continue;
}else{ //否则将total累加
$result[$value['parent_id']]['total'] += $value['total'];
}
}
var_dump(array_values($result));