$str = "-首页/-医院动态/yydt-特色疗法/tslf-专家团队/zjtd-治疗设备/zlsb-胃部疾病/wbjb--胃溃疡/wky---常识/cs---症状/zz---治疗/zl---饮食/ys--反流性胃炎/flxwy---常识/cs---症状/zz---治疗/zl---饮食/ys--糜烂性胃炎/mlxwy---常识/cs---症状/zz---治疗/zl---饮食/ys--浅表性胃炎/qbxwy--萎缩性胃炎/wsxwy--急性胃炎/jxwy-肠部疾病/cbjb--结肠炎/jcy---常识/cs---症状/zz---治疗/zl---饮食/ys--直肠炎/zcy---常识/cs---症状/zz---治疗/zl---饮食/ys--十二指肠溃疡/sezcky---常识/cs---症状/zz---治疗/zl---饮食/ys--急性肠炎/jxcy-胃肠症状/wczz--口臭/kc---常识/cs---症状/zz---治疗/zl---饮食/ys--幽门螺旋杆菌/ymlxgj--胃痛胃胀/wtwz--便秘/bm--胃出血/wcx-hp检查/hp-康复案例/kfal-在线咨询/swt-来院路线/lylx";
preg_match_all("/(-{1,3}[^-]+)/", $str, $matches);
$out = array();
foreach ($matches[1] as $key => $value) {
$cout = substr_count($value,"-");
$out[$cout][] = $value;
}
var_dump($out);

解决方案 »

  1.   

    <?php
    $str = "-首页/-医院动态/yydt-特色疗法/tslf-专家团队/zjtd-治疗设备/zlsb-胃部疾病/wbjb--胃溃疡/wky---常识/cs---症状/zz---治疗/zl---饮食/ys--反流性胃炎/flxwy---常识/cs---症状/zz---治疗/zl---饮食/ys--糜烂性胃炎/mlxwy---常识/cs---症状/zz---治疗/zl---饮食/ys--浅表性胃炎/qbxwy--萎缩性胃炎/wsxwy--急性胃炎/jxwy-肠部疾病/cbjb--结肠炎/jcy---常识/cs---症状/zz---治疗/zl---饮食/ys--直肠炎/zcy---常识/cs---症状/zz---治疗/zl---饮食/ys--十二指肠溃疡/sezcky---常识/cs---症状/zz---治疗/zl---饮食/ys--急性肠炎/jxcy-胃肠症状/wczz--口臭/kc---常识/cs---症状/zz---治疗/zl---饮食/ys--幽门螺旋杆菌/ymlxgj--胃痛胃胀/wtwz--便秘/bm--胃出血/wcx-hp检查/hp-康复案例/kfal-在线咨询/swt-来院路线/lylx";
    preg_match_all("/(-{1,3}[^-]+)/", $str, $matches);$out = array();
    $i = $j = $k = 0;
    //var_dump($matches);exit;
    foreach ($matches[1] as $key => $value) {
    $cout = substr_count($value,"-");
    if($cout == 1){
    $i ++;
    $j = $k = 0; $index = $i;

    else if($cout == 2){
    $j ++;
    $k = 0;
    $index = $i."-".$j;
    } else{
    $index = $i."-".$j."-".$k;
    }
    $out[$index] = $value;}
    var_dump($out);
    ?>结果为:
    array
      1 => string '-首页/' (length=8)
      2 => string '-医院动态/yydt' (length=18)
      3 => string '-特色疗法/tslf' (length=18)
      4 => string '-专家团队/zjtd' (length=18)
      5 => string '-治疗设备/zlsb' (length=18)
      6 => string '-胃部疾病/wbjb' (length=18)
      '6-1' => string '--胃溃疡/wky' (length=15)
      '6-1-0' => string '---饮食/ys' (length=12)
      '6-2' => string '--反流性胃炎/flxwy' (length=23)
      '6-2-0' => string '---饮食/ys' (length=12)
      '6-3' => string '--糜烂性胃炎/mlxwy' (length=23)
      '6-3-0' => string '---饮食/ys' (length=12)
      '6-4' => string '--浅表性胃炎/qbxwy' (length=23)
      '6-5' => string '--萎缩性胃炎/wsxwy' (length=23)
      '6-6' => string '--急性胃炎/jxwy' (length=19)
      7 => string '-肠部疾病/cbjb' (length=18)
      '7-1' => string '--结肠炎/jcy' (length=15)
      '7-1-0' => string '---饮食/ys' (length=12)
      '7-2' => string '--直肠炎/zcy' (length=15)
      '7-2-0' => string '---饮食/ys' (length=12)
      '7-3' => string '--十二指肠溃疡/sezcky' (length=27)
      '7-3-0' => string '---饮食/ys' (length=12)
      '7-4' => string '--急性肠炎/jxcy' (length=19)
      8 => string '-胃肠症状/wczz' (length=18)
      '8-1' => string '--口臭/kc' (length=11)
      '8-1-0' => string '---饮食/ys' (length=12)
      '8-2' => string '--幽门螺旋杆菌/ymlxgj' (length=27)
      '8-3' => string '--胃痛胃胀/wtwz' (length=19)
      '8-4' => string '--便秘/bm' (length=11)
      '8-5' => string '--胃出血/wcx' (length=15)
      9 => string '-hp检查/hp' (length=12)
      10 => string '-康复案例/kfal' (length=18)
      11 => string '-在线咨询/swt' (length=17)
      12 => string '-来院路线/lylx' (length=18)
      

  2.   

    楼上的代码我修改了一下 实现了无限极分类 
    <?php
    $str = "-首页/-医院动态/yydt-特色疗法/tslf-专家团队/zjtd-治疗设备/zlsb-胃部疾病/wbjb--胃溃疡/wky---常识/cs---症状/zz---治疗/zl---饮食/ys--反流性胃炎/flxwy---常识/cs---症状/zz---治疗/zl---饮食/ys--糜烂性胃炎/mlxwy---常识/cs---症状/zz---治疗/zl---饮食/ys--浅表性胃炎/qbxwy--萎缩性胃炎/wsxwy--急性胃炎/jxwy-肠部疾病/cbjb--结肠炎/jcy---常识/cs---症状/zz---治疗/zl---饮食/ys--直肠炎/zcy---常识/cs---症状/zz---治疗/zl---饮食/ys--十二指肠溃疡/sezcky---常识/cs---症状/zz---治疗/zl---饮食/ys--急性肠炎/jxcy-胃肠症状/wczz--口臭/kc---常识/cs---症状/zz---治疗/zl---饮食/ys--幽门螺旋杆菌/ymlxgj--胃痛胃胀/wtwz--便秘/bm--胃出血/wcx-hp检查/hp-康复案例/kfal-在线咨询/swt-来院路线/lylx";
    preg_match_all("/(-{1,3}[^-]+)/", $str, $matches);$out = array();
    $i = $j = $k = 0;
    //var_dump($matches[1] );exit;
    foreach ($matches[1] as $key => $value) {
    $cout = substr_count($value,"-");
    if($cout == 1){
    $i ++;
    $j = $k = 0;
    $value=str_replace("-","",$value);
    $index = (0)."-".(0)."-".($key+1);

    else if($cout == 2){
    $j ++;
    $s=$key+1;
    $k = 0;
    $value=str_replace("--","",$value);
    $index = $i."-".($i)."-".($s);
    } else  if($cout == 3){
    $k++;
    $value=str_replace("---","",$value);
    $index = $i."-".($s)."-".($key+1);
    }
    $out[$index] = $value;}
    var_dump($out);
    ?>输出为:
    array (size=56)
      '0-0-1' => string '首页/' (length=7)
      '0-0-2' => string '医院动态/yydt' (length=17)
      '0-0-3' => string '医院动态/yydt' (length=17)
      '0-0-4' => string '特色疗法/tslf' (length=17)
      '0-0-5' => string '专家团队/zjtd' (length=17)
      '0-0-6' => string '治疗设备/zlsb' (length=17)
      '0-0-7' => string '胃部疾病/wbjb' (length=17)
      '7-7-8' => string '胃溃疡/wky' (length=13)
      '7-8-9' => string '常识/cs' (length=9)
      '7-8-10' => string '症状/zz' (length=9)
      '7-8-11' => string '治疗/zl' (length=9)
      '7-8-12' => string '饮食/ys' (length=9)
      '7-7-13' => string '反流性胃炎/flxwy' (length=21)
      '7-13-14' => string '常识/cs' (length=9)
      '7-13-15' => string '症状/zz' (length=9)
      '7-13-16' => string '治疗/zl' (length=9)
      '7-13-17' => string '饮食/ys' (length=9)
      '7-7-18' => string '糜烂性胃炎/mlxwy' (length=21)
      '7-18-19' => string '常识/cs' (length=9)
      '7-18-20' => string '症状/zz' (length=9)
      '7-18-21' => string '治疗/zl' (length=9)
      '7-18-22' => string '饮食/ys' (length=9)
      '7-7-23' => string '浅表性胃炎/qbxwy' (length=21)
      '7-7-24' => string '萎缩性胃炎/wsxwy' (length=21)
      '7-7-25' => string '急性胃炎/jxwy' (length=17)
      '0-0-26' => string '肠部疾病/cbjb' (length=17)
      '8-8-27' => string '结肠炎/jcy' (length=13)
      '8-27-28' => string '常识/cs' (length=9)
      '8-27-29' => string '症状/zz' (length=9)
      '8-27-30' => string '治疗/zl' (length=9)
      '8-27-31' => string '饮食/ys' (length=9)
      '8-8-32' => string '直肠炎/zcy' (length=13)
      '8-32-33' => string '常识/cs' (length=9)
      '8-32-34' => string '症状/zz' (length=9)
      '8-32-35' => string '治疗/zl' (length=9)
      '8-32-36' => string '饮食/ys' (length=9)
      '8-8-37' => string '十二指肠溃疡/sezcky' (length=25)
      '8-37-38' => string '常识/cs' (length=9)
      '8-37-39' => string '症状/zz' (length=9)
      '8-37-40' => string '治疗/zl' (length=9)
      '8-37-41' => string '饮食/ys' (length=9)
      '8-8-42' => string '急性肠炎/jxcy' (length=17)
      '0-0-43' => string '胃肠症状/wczz' (length=17)
      '9-9-44' => string '口臭/kc' (length=9)
      '9-44-45' => string '常识/cs' (length=9)
      '9-44-46' => string '症状/zz' (length=9)
      '9-44-47' => string '治疗/zl' (length=9)
      '9-44-48' => string '饮食/ys' (length=9)
      '9-9-49' => string '幽门螺旋杆菌/ymlxgj' (length=25)
      '9-9-50' => string '胃痛胃胀/wtwz' (length=17)
      '9-9-51' => string '便秘/bm' (length=9)
      '9-9-52' => string '胃出血/wcx' (length=13)
      '0-0-53' => string 'hp检查/hp' (length=11)
      '0-0-54' => string '康复案例/kfal' (length=17)
      '0-0-55' => string '在线咨询/swt' (length=16)
      '0-0-56' => string '来院路线/lylx' (length=17)
      

  3.   

    从数据组织上看,你的这个结果数组能方便的重现菜单吗?
    或者说,能方便的还原成原始串吗?从算法实现上看,无论是正则规则 /(-{1,3}[^-]+)/ 还是条件判断 if($cout == 3){
    都限定了分类层次不能大于 3,怎么能说是”实现了无限极分类“呢?
      

  4.   

    本帖最后由 xuzuning 于 2014-03-21 08:59:49 编辑
      

  5.   

    继续写if else 继续匹配 其实按照日常的导航条的这个 长度来说 3 层已经够用了  为毛还要写这么多层?