PHP两种实现无级递归分类的方法
在开发中,经常需要将数据进行分类,分成无限级分类,本文介绍PHP中两种实现无级递归分类的方法。
方法一:使用递归函数实现
递归函数指的是调用自身函数来达到循环目的的一种方法。递归函数是函数内部直接或间接地调用自身的一种函数调用方式。
分类数组如下所示:
$category = array(
array('id'=>1, 'name'=>'电器', 'parent_id'=>0),
array('id'=>2, 'name'=>'手机', 'parent_id'=>1),
array('id'=>3, 'name'=>'电视', 'parent_id'=>1),
array('id'=>4, 'name'=>'小米', 'parent_id'=>2),
array('id'=>5, 'name'=>'华为', 'parent_id'=>2),
array('id'=>6, 'name'=>'TCL', 'parent_id'=>3),
array('id'=>7, 'name'=>'海信', 'parent_id'=>3),
);
实现代码如下:
function cate($category, $parent_id=0)
{
$arr = array();
foreach($category as $k=>$v)
{
if($v['parent_id'] == $parent_id)
{
$v['child'] = cate($category,$v['id']);
$arr[]=$v;
}
}
return $arr;
}
print_r(cate($category));
输出结果:
Array
(
[0] => Array
(
[id] => 1
[name] => 电器
[parent_id] => 0
[child] => Array
(
[0] => Array
(
[id] => 2
[name] => 手机
[parent_id] => 1
[child] => Array
(
[0] => Array
(
[id] => 4
[name] => 小米
[parent_id] => 2
[child] => Array
(
)
)
[1] => Array
(
[id] => 5
[name] => 华为
[parent_id] => 2
[child] => Array
(
)
)
)
)
[1] => Array
(
[id] => 3
[name] => 电视
[parent_id] => 1
[child] => Array
(
[0] => Array
(
[id] => 6
[name] => TCL
[parent_id] => 3
[child] => Array
(
)
)
[1] => Array
(
[id] => 7
[name] => 海信
[parent_id] => 3
[child] => Array
(
)
)
)
)
)
)
)
方法二:使用“引用”方式进行递归编写
“引用”指的是在函数内部直接对实参进行修改,从而达到修改外部变量的效果。在递归函数编写过程中,如果采用值传递,就需要在递归调用函数之后将返回的结果再传递给上级函数,非常麻烦。而采用引用方式,可以直接修改上级传递的数组。
实现代码如下:
function cate(&$category, $parent_id=0){
$arr = array();
foreach($category as $key=>&$value){
if($value['parent_id'] == $parent_id){
$value['child'] = cate($category, $value['id']);
$arr[] = $value;
}
}
return $arr;
}
print_r(cate($category));
输出结果同方法一。
通过以上两种方法,可以快速与简便地实现无级递归分类。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP两种实现无级递归分类的方法 - Python技术站