演算法 - PHP根據路徑數組轉成一個分類樹

來源:互聯網
上載者:User
$paths = ['aa','aa/bb','ww/yyy','aa/kk','xx/oo/pp'];

根據這個數組,轉成分類樹的結構,如下:
aa
-bb
-kk
ww
-yyy
xx
-oo
--pp

回複內容:

$paths = ['aa','aa/bb','ww/yyy','aa/kk','xx/oo/pp'];

根據這個數組,轉成分類樹的結構,如下:
aa
-bb
-kk
ww
-yyy
xx
-oo
--pp

$v2){        $temp .= empty($temp)?$v2:'/'.$v2;        $arr[$temp] = $temp;    }}sort($arr); //排序//迴圈輸出foreach($arr as $v){    $path = explode('/',$v);    $n = count($path);    echo line($n).$path[$n-1]."\n";}function line($n){    $line = '';    for($i=1;$i<$n;$i++){        $line .= '-';    }    return $line;}

為什麼不弄成二維數組。

可以用無限極分類

想辦法弄成這樣

元素  id  pidaa    1   0bb    2   1ww    3   0yyy   4   3kk    5   1xx    6   0oo    7   6pp    8   7 

用無限極分類的思想

// 重排數組$paths = ['aa','aa/bb','ww/yyy','aa/kk','xx/oo/pp'];sort($paths);// 得到結果數組:k為值,v為前面-$res = [];foreach ($paths as $v) {    // 拆分路徑    $path = explode('/', $v);    foreach ($path as $k1 => $v1) {        // 此項前面幾個-        $res[$v1] = '';        for ($i=0; $i < $k1; $i++) {            $res[$v1] .= '-';        }    }}// 輸出foreach ($res as $k => $v) {    echo "$v$k
";}

  // 把這類資料轉換成無限級格式...  $paths = ['aa','aa/bb/bb','ww/yyy/bb','aa/kk','xx/oo/pp'];  $data = [];  $id = 0;  foreach($paths as $path){    $tmps = explode('/', $path);    $parent = '';    foreach($tmps as $v){      $parentID = $parent == '' ? 0 : $data[$parent]['id'];      $parent .= $parent == '' ? $v : '/' . $v;      if( ! isset($data[$parent]) ){        $id++;        $tmp = array(          'id' => $id,          'parent_id' => $parentID,          'key' => $v,          'path' => $parent,        );        $data[$parent] = $tmp;      }    }  }    print_r($data);  // 再以無限級方式處理資料 $data 
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.