码迷,mamicode.com
首页 > Web开发 > 详细

php非递归无限级分类.

时间:2015-03-02 13:05:26      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

项目需要.递归无限级分类效率实在太低.理了半天思路写的.

分类越多效率越高.

/**
 * 单次循环返回无限极分类嵌套
 * @param array $data 操作的数组
 * @param string $columnPri 唯一键名,如果是表则是表的主键
 * @param string $columnPid 父ID键名
 * @return array
 */
function region_tree($data, $columnPri, $columnPid)
{
    define(‘__parent_id‘, $columnPid);
    define(‘__pri_id‘, $columnPri);
    if (empty($data)) {
        return array();
    }
    usort($data, function ($prev, $next) {
        return CStrCmp($prev[__parent_id],$next[__parent_id]);
    });

    foreach ($data as $value) {
        $parent_id = $value[__parent_id];
        $pri_id    = $value[__pri_id];
        if (isset(${$pri_id})) {
            $value[‘_data‘] = isset($value[‘_data‘]) ? array_merge($value[‘_data‘], ${$pri_id}) : ${$pri_id};
            unset(${$pri_id});
        }
        ${$parent_id}[] = $value;
    }
    unset($data, $key, $value, $columnPid, $columnPri, $pri_id);
    $dataArray = ${$parent_id}[0];
    return $dataArray;
}

/**
 * 无限递归关联函数
 * 兼容5.3-写的
 * @param $a
 * @param $b
 * @return int
 */
function CStrCmp($a, $b)
{
    if ($a == $b) return 0;
    return $a > $b ? -1 : 1;
}

下面是递归无限极分类函数

/**
 * 递归返回无限极分类嵌套
 * @param $data 操作的数组
 * @param int $pid 一级PID的值
 * @param string $fieldPri 唯一键名,如果是表则是表的主键
 * @param string $fieldPid 父ID键名
 * @return array
 */
function channelLevel($data, $pid = 0, $fieldPri = ‘cid‘, $fieldPid = ‘pid‘)
{
    if (empty($data)) {
        return array();
    }
    $arr = array();
    foreach ($data as $v) {
        if ($v[$fieldPid] == $pid) {
            $arr[$v[$fieldPri]]           = $v;
            $arr[$v[$fieldPri]]["region"] = channelLevel($data, $v[$fieldPri], $fieldPri, $fieldPid);
        }
    }
    return $arr;
}

 

php非递归无限级分类.

标签:

原文地址:http://www.cnblogs.com/iyoule/p/4308437.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!