/** * @param $data 操作的数组 * @param string $fieldPri 唯一键名,如果是表则是表的主键 * @param string $fieldPid 父ID键名 * @param int $pid 一级PID的值 * @param string $sid 子ID用于获得指定指ID的所有父ID * @param int $type 操作方式1=>返回多维数组,2=>返回一维数组,3=>得到指定子ID(参数$sid)的所有父 * @param string $html 名称前缀,用于在视图中显示层次感的列表 * @param int $level 不需要传参数(执行时调用) * @return array */ private function channel($data, $fieldPri = 'cid', $fieldPid = 'pid', $pid = 0, $sid = null, $type = 2, $html = " ", $level = 1) { if (!$data) { return array(); } switch ($type) { case 1: $arr = array(); foreach ($data as $v) { if ($v[$fieldPid] == $pid) { $arr[$v[$fieldPri]] = $v; $arr[$v[$fieldPri]]['html'] = str_repeat($html, $level - 1); $arr[$v[$fieldPri]]["Data"] = self::channel($data, $fieldPri, $fieldPid, $v[$fieldPri], $sid, $type, $html, $level + 1); } } return $arr; case 2: $arr = array(); $id = 0; foreach ($data as $v) { if ($v[$fieldPid] == $pid) { $arr[$id] = $v; $arr[$id]['level'] = $level; $arr[$id]['html'] = str_repeat($html, $level - 1); $sArr = self::channel($data, $fieldPri, $fieldPid, $v[$fieldPri], $sid, $type, $html, $level + 1); $arr = array_merge($arr, $sArr); $id = count($arr); } } return $arr; case 3: static $arr = array(); foreach ($data as $v) { if ($v[$fieldPri] == $sid) { $arr[] = $v; $sArr = self::channel($data, $fieldPri, $fieldPid, $pid, $v[$fieldPid], $type, $html, $level + 1); $arr = array_merge($arr, $sArr); } } return $arr; } }
版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。
以上就介紹了PHP處理父子層級選擇問題,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。