您的位置:首页 > 运维架构

ecshop无限处理分类

2015-12-31 18:27 471 查看
<?php
function get_cate($arr){
static $cat_options = array();

if (!isset($cat_options[0]))
{
$level = $last_cat_id = 0;
$options = $cat_id_array = $level_array = array();

if ($data === false)
{
while (!empty($arr))
{
foreach ($arr AS $key => $value)
{

$cat_id = $value['cat_id'];

if ($level == 0 && $last_cat_id == 0)
{
if ($value['parent_id'] > 0)
{    // 非父类
break;
}

$options[$cat_id]          = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id']    = $cat_id;
$options[$cat_id]['name']  = $value['cat_name'];
unset($arr[$key]);

if ($value['has_children'] == 0)
{
continue;
}

$last_cat_id  = $cat_id;

$cat_id_array = array($cat_id);

$level_array[$last_cat_id] = ++$level;

continue;
}    // end if ($level == 0 && $last_cat_id == 0)

if ($value['parent_id'] == $last_cat_id)
{
$options[$cat_id]          = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id']    = $cat_id;
$options[$cat_id]['name']  = $value['cat_name'];
unset($arr[$key]);

if ($value['has_children'] > 0)
{
/*
判断是否是有跨级的,如
$array = array(1=>'',
2=>'',
3=>'',
4=>''
5=>'')
$array[3],$array[5]之间,由于在array[4]时,此时为末节点
此时会由
$last_cat_id = array_pop($cat_id_array);
所以会导致 array[3]独立出来,这样就必须加上
*/
if (end($cat_id_array) != $last_cat_id)
{
$cat_id_array[] = $last_cat_id;
}
$last_cat_id    = $cat_id;
$cat_id_array[] = $cat_id;
$level_array[$last_cat_id] = ++$level;
}
}    // eof if ($value['parent_id'] == $last_cat_id)
elseif ($value['parent_id'] > $last_cat_id)
{
break;
}    // eof if ($value['parent_id'] == $last_cat_id)
}
// end foreach ------------
$count = count($cat_id_array);

if ($count > 1)
{
$last_cat_id = array_pop($cat_id_array);
}
elseif ($count == 1)
{    //由于上一级的原因,会导致 $last_cat_id是子节点
if ($last_cat_id != end($cat_id_array))
{
$last_cat_id = end($cat_id_array);
}
else
{
$level = 0;
$last_cat_id = 0;
$cat_id_array = array();
continue;
}
}

if ($last_cat_id && isset($level_array[$last_cat_id]))
{
$level = $level_array[$last_cat_id];
}
else
{
$level = 0;
}
}
// end while ------------
//如果数组过大,不采用静态缓存方式
if (count($options) <= 2000)
{
write_static_cache('cat_option_static', $options);
}
}
else
{
$options = $data;
}
$cat_options[0] = $options;
}
else
{
$options = $cat_options[0];
}

if (!$spec_cat_id)
{
return $options;
}
else
{
if (empty($options[$spec_cat_id]))
{
return array();
}

$spec_cat_id_level = $options[$spec_cat_id]['level'];

foreach ($options AS $key => $value)
{
if ($key != $spec_cat_id)
{
unset($options[$key]);
}
else
{
break;
}
}

$spec_cat_id_array = array();
foreach ($options AS $key => $value)
{
if (($spec_cat_id_level == $value['level'] && $value['cat_id'] != $spec_cat_id) ||
($spec_cat_id_level > $value['level']))
{
break;
}
else
{
$spec_cat_id_array[$key] = $value;
}
}
$cat_options[$spec_cat_id] = $spec_cat_id_array;

return $spec_cat_id_array;
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: