$this->buildTree($nodes, 0, $this->selected), ]; echo $this->render( 'device_cat_checkbox', $params); } /** * * 构造树数据 * @param $catDatas 一维数组 * @param int $parentId 父ID * @param int $selectedId 默认选中 * @return array 返回树状的数组 */ private function buildTree($catDatas, $parentId = 0, $selectedIds = []) { // 处理送过来的数据 $catDatas = (array)$catDatas; $parentId = (int)$parentId; /** * 处理数据 */ $treeChilds = []; foreach ($catDatas AS $i => $catData) { if ($catData['parent_id'] == $parentId) { $child = []; $child['id'] = $catData['id']; $child['text'] = $catData['name']; $child['sort_order'] = $catData['sort_order']; if (in_array($catData['id'], $selectedIds)) { $child['checked'] = true; } else { $child['checked'] = false; } // 删除已调用的数组 unset($catDatas[$i]); // 回调数据 $buildTree = self::buildTree( $catDatas, $catData['id'], $selectedIds); $child['children'] = !empty($buildTree) ? $buildTree : false; $treeChilds[] = $child; } } // 排序 $sortOrders = []; foreach ($treeChilds as $child) { $sortOrders[] = $child['sort_order']; } array_multisort($sortOrders, SORT_ASC, $treeChilds); return $treeChilds; } }