php无限分类添加符号,PHP无限级分类实现层级值间用字符串拼接

欢迎来到阿八个人博客网站。本

阿八个人博客

网站提供最新的站长新闻,各种互联网资讯。

喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术!

URL链接:https://www.abboke.com/jsh/2019/0719/9412.html

1190000019804856

题目与需求

题目:

如下数组,实现这么一个结果value=10-101-1011,label=万达-蜘蛛侠-已购票,其实就是层级值间用字符串拼接。

$example=array(

array(

'value'=>'10',

'label'=>'万达',

'options'=>array(

array(

'value'=>'101',

'label'=>'蜘蛛侠',

'options'=>array(

array(

'value'=>'1011',

'label'=>'已购票'

)

),

),

array(

'value'=>'102',

'label'=>'复仇者联盟'

),

)

),

array(

'value'=>'11',

'label'=>'红星影城',

'options'=>array(

array(

'value'=>'110',

'label'=>'速度与激情4'

),

array(

'value'=>'111',

'label'=>'煎饼侠'

),

)

),

);

需求:

1、无限极。

2、用递归的方式实现(似乎也就只能用递归的方式实现,如有其他实现方式,欢迎留言评论)。

实现步骤

1、循环数组。

2、判断当前value值与目标值是否相等,相等时,把value值与label值记录到新的自增长的数组里,不等时,用continue跳过循环。

3、判断options是否存在,不存在不做处理,存在则递归调用当前的方法,把options的数组,options选中的值(这里默认选中第一个),还有2中新的数组传回去。

4、把2中得到的新数组循环,将value和label的值拼接并加上"-"符号,最后把多余的"-"符号用rtrim函数去除。

5、完成,把结果返回。

代码示例

public function recursion($example,$value,$tmp=array())

{

// global $tmp; 数组递归不回传,这么定义也行

foreach($example as $k=>$v){

if($value==$v['value']){

$arr['val']=$v['value'];

$arr['lab']=$v['label'];

$tmp[]=$arr;

}else{

continue;

}

if($v['options']){

return $this->recursion($v['options'],$v['options'][0]['value'],$tmp);

}

}

$val=$lab="";

if(!empty($tmp)){

foreach($tmp as $v){

$val.=$v['val'].'-';

$lab.=$v['lab'].'-';

}

$val=rtrim($val,'-');

$lab=rtrim($lab,'-');

}

return array('value'=>$val,'label'=>$lab);

}

调用输出

//调用

$res=$this->recursion($example,10);

print_r($res);die;

//输出

Array

(

[value] => 10-101-1011

[label] => 万达-蜘蛛侠-已购票

)

总结分析

本题是无限级分类实现层级间用字符串拼接,目前只想到用递归的方式实现,至于是不是只能用递归的方式来实现欢迎留言评论。

另一种需求,关于实现无限极分类的两种方式,递归和引用,可以了解下:点击链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值