Просмотр поста

.
Jahak

Писал для себя

<?php
/**
 * Функция создает навигационную цепочку как на GitHub ;)
 *
 * @param string $string
 * @param string $link      &lt;a href=&quot;?s=%s&quot;&gt;%s&lt;/a&gt;
 * @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('&nbsp;', 4) . breadcrumb($string, null, $key) . '<br>' . PHP_EOL;
    }
    echo ']<br>' . PHP_EOL;
}