PHP無限級分類實現層級值間用字符串拼接

題目與需求

題目:
以下數組,實現這麼一個結果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'=>'煎餅俠'
                    ),
                )
            ),
        );

需求:
一、無限極。
二、用遞歸的方式實現(彷佛也就只能用遞歸的方式實現,若有其餘實現方式,歡迎留言評論)。函數

實現步驟

一、循環數組。
二、判斷當前value值與目標值是否相等,相等時,把value值與label值記錄到新的自增加的數組裏,不等時,用continue跳過循環。
三、判斷options是否存在,不存在不作處理,存在則遞歸調用當前的方法,把options的數組,options選中的值(這裏默認選中第一個),還有2中新的數組傳回去。
四、把2中獲得的新數組循環,將value和label的值拼接並加上"-"符號,最後把多餘的"-"符號用rtrim函數去除。
五、完成,把結果返回。this

代碼示例

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] => 萬達-蜘蛛俠-已購票
)

總結分析

本題是無限級分類實現層級間用字符串拼接,目前只想到用遞歸的方式實現,至因而不是隻能用遞歸的方式來實現歡迎留言評論。.net

另外一種需求,關於實現無限極分類的兩種方式,遞歸和引用,能夠了解下:點擊連接code

相關文章
相關標籤/搜索