Замените элементы в строке для исключения последнего события
У меня есть следующий код, который захватывает категории из моего блога wordpress и заменяет все разрывы строк трубой.
<?php $variable = wp_list_categories('style=none&echo=0'); ?>
<?php $variable = str_replace('<br />', ' | ', $variable); ?>
<?php echo $variable; ?>
Код работает - однако мне нужно, чтобы последнее событие было проигнорировано. Как-нибудь обойти это?
Спасибо!
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