$v) { $data[$k] = $v[$key]; } array_multisort($data, $sort, $array); return $array; } /** * 把返回的数据集转换成Tree * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * @param string $level level标记字段 * @return array */ public static function list2Tree($list, $pk = 'id', $pid = 'pid', $child = 'children', $root = 0) { if (!is_array($list)) { return []; } // 创建基于主键的数组引用 $aRefer = []; foreach ($list as $key => $data) { $aRefer[$data[$pk]] = &$list[$key]; } foreach ($list as $key => $data) { // 判断是否存在parent $parentId = $data[$pid]; if ($root === $parentId) { $tree[] = &$list[$key]; } else { if (isset($aRefer[$parentId])) { $parent = &$aRefer[$parentId]; $parent[$child][] = &$list[$key]; } } } return $tree; } /** * 把返回的数据集转换成Tree(id作为键名) * @param array $rows 要转换的数据集 * @param string $id 主键id * @param string $pid parent标记字段 * @param string $child 子节点存放的位置 * @return array */ public static function list2Tree2($rows, $id = 'id', $pid = 'pid', $child = 'children') { $items = array(); foreach ($rows as $row) { $items[$row[$id]] = $row; } foreach ($items as $item) { $items[$item[$pid]][$child][$item[$id]] = &$items[$item[$id]]; } return isset($items[0][$child]) ? $items[0][$child] : []; } }