Как правильно распределить путь в PHP

что это лучший способ сделать следующее:

Я получаю путь с запросом AJAX

например, dir1/dir2/dir3/dir4

Мне нужно представить его вот так на моей веб-странице:

 dir1 >> dir2 >> dir3 >> dir4 

каждый из которых является html-привязными тегами с атрибутом href, являющимся

 /dir1 /dir1/dir2 /dir1/dir2/dir3 /dir1/dir2/dir3/dir4 

соответственно

Каков самый элегантный и эффективный способ достичь этого?

до сих пор я делаю что-то вроде этого, которое, я думаю, действительно грязно:

 <?php $dirs = explode(PATH_SEPARATOR, $this->metadata["path"]); foreach ($dirs as $key=>$val) { if ($val == '') { continue; } $pathArray = array(); for ($i = 0; $i <= $key; $i++) { array_push($pathArray, $dirs[$i]); } $path = implode('/', $pathArray); echo " >> <a href=" . $path . ">" . truncate($val) . "</a>"; } ?> 

заранее спасибо

Solutions Collecting From Web of "Как правильно распределить путь в PHP"

Возможно, что-то вроде этого (если я правильно понял):

 <?php $str = 'dir1/dir2/dir3/dir4'; $output = array(); $chunks = explode('/', $str); foreach ($chunks as $i => $chunk) { $output[] = sprintf( '<a href="#/%s">%s</a>', implode('/', array_slice($chunks, 0, $i + 1)), $chunk ); } echo implode(' &gt;&gt; ', $output); 

Вывод:

 <a href="#/dir1">dir1</a> &gt;&gt; <a href="#/dir1/dir2">dir2</a> &gt;&gt; <a href="#/dir1/dir2/dir3">dir3</a> &gt;&gt; <a href="#/dir1/dir2/dir3/dir4">dir4</a> 

Я бы сделал это так …

 <?php $path = 'dir1/dir2/dir3/dir4'; $dirs = explode('/', $path); while (count($dirs) > 0) { $link = '/' . implode($dirs, '/'); $text = array_pop($dirs); $breadcrumb = "<a href=\"$link\">$text</a>" . $breadcrumb; if (count($dirs) > 0) { $breadcrumb = ' &gt;&gt; ' . $breadcrumb; } } echo $breadcrumb; 

Если вы получаете этот путь на основе URL-адреса, вам не нужно использовать PATH_SEPARATOR потому что URL-адреса должны всегда использовать / . Если он получен из пути файловой системы, вам нужно будет поменять его вместо '/' в строке 4.

Var 1

 <?php $str = '/dir1/dir2/dir3/dir4'; $arr = array_filter(explode('/',$str)); $out = array('/'.implode('/',$arr).'/'); while((array_pop($arr) and !empty($arr))){ $out[] = '/'.implode('/',$arr).'/'; }; print_r($out); /* Array( [0] => /dir1/dir2/dir3/dir4/ [1] => /dir1/dir2/dir3/ [2] => /dir1/dir2/ [3] => /dir1/ ) */ ?> 

Var 2 (Ссылки)

 <?php $str = '/dir1/dir2/dir3/dir4'; $arr = array_filter(explode('/',$str)); $out = array('<a href="/'.implode('/',$arr).'/">'.basename($str).'</a>'); while((array_pop($arr) and !empty($arr))){ $out[] = '<a href="/'.implode('/',$arr).'/">'.end($arr).'</a>'; }; print_r($out); /* Array ( [0] => <a href="/dir1/dir2/dir3/dir4/">dir4</a> [1] => <a href="/dir1/dir2/dir3/">dir3</a> [2] => <a href="/dir1/dir2/">dir2</a> [3] => <a href="/dir1/">dir1</a> ) */ ?>