$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