Heim > Backend-Entwicklung > PHP-Tutorial > Algorithmus – PHP wandelt ein Array von Pfaden in einen Verzeichnisbaum um

Algorithmus – PHP wandelt ein Array von Pfaden in einen Verzeichnisbaum um

WBOY
Freigeben: 2016-10-11 14:23:12
Original
1504 Leute haben es durchsucht

<code>$paths = ['aa','aa/bb','ww/yyy','aa/kk','xx/oo/pp'];
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Konvertieren Sie dieses Array entsprechend in die Struktur des Verzeichnisbaums wie folgt:
aa
-bb
-kk
ww
-yyy
xx
-oo
--pp

Antwortinhalt:

<code>$paths = ['aa','aa/bb','ww/yyy','aa/kk','xx/oo/pp'];
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Konvertieren Sie dieses Array entsprechend in die Struktur des Verzeichnisbaums wie folgt:
aa
-bb
-kk
ww
-yyy
xx
-oo
--pp

<code class="php"><?php
$paths = ['aa','aa/bb/bb','ww/yyy/bb','aa/kk','xx/oo/pp'];

$arr = [];//先定义一个空数组用来存储所有路径。

//循环找出所有路径
foreach($paths as $v){
    $path = explode('/',$v);
    $temp = '';
    foreach($path as $k2=>$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;
}</code>
Nach dem Login kopieren

Warum nicht ein zweidimensionales Array daraus machen?

Kann nach Infinitus klassifiziert werden

Finden Sie einen Weg, es so zu machen

<code>元素  id  pid
aa    1   0
bb    2   1
ww    3   0
yyy   4   3
kk    5   1
xx    6   0
oo    7   6
pp    8   7 </code>
Nach dem Login kopieren

Die Idee, eine unendliche Klassifizierung zu verwenden

<code class="php">// 重排数组
$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<br>";
}</code>
Nach dem Login kopieren

<code>  // 把这类数据转换成无限级格式...
  $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 
</code>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage