$list 为数组
$list = $this->generateTree($list);
function generateTree($data)
{
$items = array();
foreach ($data as $v) {
$items[$v['id']] = $v;
}
$tree = array();
foreach ($items as $k => $item) {
if (isset($items[$item['pid']])) {
$items[$item['pid']]['son'][] = &$items[$k];
} else {
$tree[] = &$items[$k];
}
}
return $tree;
}
$testInjectArray = [];
$res = $this->injectArray($list, $testInjectArray);
function injectArray(array $target, array $inject, $depth = 0){
$hasChildrenKey = array_key_exists('son', $target);
$hasChildren = $hasChildrenKey && !empty($target['son']);
if($depth % 2 == 0){
foreach($target as $k => $v)
if(is_array($v))
$target[$k] = $this->injectArray($v, $inject, $depth+1);
}
elseif(!$hasChildren){
if(!$hasChildrenKey)
$target['son'] = array();
$target['son'] = array_merge_recursive($target['son'], $inject);
}
elseif($hasChildrenKey){
$target['son'] = $this->injectArray($target['son'], $inject, $depth+1);
}
return $target;
}