无限极分类

/**
* 递归操作数组创建树状等级数组(可用于递归栏目操作)
* @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
*/

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"] = 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 =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 = channel($data, $fieldPri, $fieldPid, $pid, $v[$fieldPid], $type, $html, $level + 1);
$arr = array_merge($arr, $sArr);
}
}
return $arr;
}
}

 

 

 

 

 

 

调用方式:

$data['cate']=channel($data,'cid','pid',0,0,2,'    ');

 

posted @ 2014-08-08 15:54  麦田守望者~  阅读(531)  评论(0编辑  收藏  举报