/**
* 运用 变量引用 实现 一维数组 转 多维树状数组
* @param $array
* @param array $options = ['id'=>'id', 'pid'=>'pid', 'sub'=>'_sub', 'root'=>0]
* @return array
*/
public static function array2Tree($array, $options = []) {
/** merge Options */
$opt = array_merge(['id'=>'id', 'pid'=>'pid', 'sub'=>'_sub', 'root'=>0], $options);
$tree = [];
if(is_array($array)){
$refer = [];
foreach ($array as $k => $v) {
$refer[$v[$opt['id']]] =& $array[$k];
}
foreach ($array as $k => $v) {
$parentId = $v[$opt['pid']];
if ($opt['root'] == $parentId) {
$tree[$v[$opt['id']]] =& $array[$k];
}else{
if (isset($refer[$parentId])) {
$parent =& $refer[$parentId];
$parent[$opt['sub']][$v[$opt['id']]] =& $array[$k];
unset($array[$k]);
}
}
}
unset($refer, $array);
}
return $tree;
}