что это лучший способ сделать следующее:
Я получаю путь с запросом 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>"; } ?>
заранее спасибо
Возможно, что-то вроде этого (если я правильно понял):
<?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(' >> ', $output);
Вывод:
<a href="#/dir1">dir1</a> >> <a href="#/dir1/dir2">dir2</a> >> <a href="#/dir1/dir2/dir3">dir3</a> >> <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 = ' >> ' . $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> ) */ ?>