Замените элементы в строке для исключения последнего события


У меня есть следующий код, который захватывает категории из моего блога wordpress и заменяет все разрывы строк трубой.

<?php $variable = wp_list_categories('style=none&echo=0'); ?>
<?php $variable = str_replace('<br />', ' | ', $variable); ?>
<?php echo $variable; ?>

Код работает - однако мне нужно, чтобы последнее событие было проигнорировано. Как-нибудь обойти это?

Спасибо!

3 2

3 ответа:

Попробуйте с rtrim(). Он удалит последнюю | из строки.

echo rtrim($variable, '|');

Обновить

$str = "hhh|yyy|YY|ll";
$last = strrpos($str, '|');
$part = rtrim(substr($str, 0, $last), '|');
if($last < strlen($str))
    $part .= substr($str, $last + 1), (strlen($str) -$last));

echo $part;

Другой способ-получить последний символ трубы | с strrpos, Как только он найден, просто удалите его с помощью индекса строки, затем используйте substr_replace и замените его на <br/> снова:

$variable = str_replace(array('<br/>', '<br />', '<br>'), '|', $variable);
$last_pipe = strrpos($variable, '|');
if($last_pipe !== false) {
    $variable[$last_pipe] = ''; // remove
    $variable = substr_replace($variable, '<br/>', $last_pipe, 0); // replace
}
echo $variable;

Пример Вывода

Sidenote: это было бы грязное решение для него, но если у вас есть более сложные операции, которые нужно сделать, возможно, было бы лучше просто использовать HTML-Парсеры с этим, DOMDocument в частности, в сочетании с ->replaceChild с регрессией.

$dom = new DOMDocument;
$dom->loadHTML($variable, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$br_tags = $dom->getElementsByTagName('br');
$i = $br_tags->length - 2; // -2 to leave the last one conversion
while($i > -1) {
    $br = $br_tags->item($i);
    $pipe = $dom->createTextNode('|');
    $br->parentNode->replaceChild($pipe, $br);
    $i--;
}

echo $dom->saveHTML();

Образец Вывод

При использовании str_replace с переменной category он возвращает categories | pipe, разделенный пробелом перед именем категории

Таким образом, вы можете удалить последние два символа один с space, а второй-это | труба.

$variable = wp_list_categories('style=none&echo=0'); 
$variable = str_replace('<br />', '|', $variable);
var_dump($variable);
echo substr($variable,0,strlen($variable)-2);

Если вы используете канал с пробелами до и после имени категории, то используйте -4 вместо -2