Писал для себя
<?php
/**
* Функция создает навигационную цепочку как на GitHub ;)
*
* @param string $string
* @param string $link <a href="?s=%s">%s</a>
* @param string $delimiter /
*
* @return string
*
* @author Jahak <ya.jahak@yandex.ru>
*/
function breadcrumb($string, $link = null, $delimiter = null)
{
if ( (null === $link) || (substr_count($link, '%s') != 2 ) )
{
$link = '<a href="%s">%s</a>';
}
if ( (null === $delimiter) || !(is_string($delimiter) && strlen($delimiter) == 1) )
{
$delimiter = '/';
}
$arrayString = array_filter(array_map('trim', explode($delimiter, $string)));
$arrayStringReverse = array_map('htmlspecialchars', array_reverse($arrayString));
$return = [];
for ( $index = 0, $count = count($arrayString); $index < $count; $index++ )
{
if ( 0 == $index )
{
$return[] = (($index == ($count - 1)) ? sprintf($link, '#', '<b>' . $arrayStringReverse[$index] . '</b>')
: '<b>' . $arrayStringReverse[$index] . '</b>');
}
else
{
$return[] = sprintf($link, urlencode(implode($delimiter, array_slice($arrayString, 0, -$index))), (($index == ($count - 1))
? '<b>' . $arrayStringReverse[$index] . '</b>' : $arrayStringReverse[$index]));
}
}
return implode(' ' . $delimiter . ' ', array_reverse($return)) . ' ' . $delimiter;
}
//Пример
$examples = [
'/' => [
'src', ' src/incfiles /', 'src//incfiles///classes', 'src // /incfiles// /classes/ CleanUser.php'
],
'>' => [
'api-2.0', 'api-2.0>>>lib', 'api-2.0>lib> > >> >>> >Tmdb','>>>api-2.0>lib>Tmdb>Client.php'
]
];
foreach ( $examples as $key => $value )
{
echo '<b>' . $key . '</b> => [<br>' . PHP_EOL;
foreach ( $value as $string )
{
echo str_repeat(' ', 4) . breadcrumb($string, null, $key) . '<br>' . PHP_EOL;
}
echo ']<br>' . PHP_EOL;
}