为最后一次出现的异常替换字符串中的项目
Replace items in the string for the exception of the last occurance
我有以下代码,它从我的 wordpress 博客中获取类别,并用管道替换所有换行符。
<?php $variable = wp_list_categories('style=none&echo=0'); ?>
<?php $variable = str_replace('<br />', ' | ', $variable); ?>
<?php echo $variable; ?>
代码有效 - 但我需要忽略最后一次出现的情况。
有什么解决办法吗?
谢谢!
试试 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;
将 str_replace
与类别变量一起使用时 return 类别 |
管道在类别名称
之前用 space 分隔
所以你可以删除最后两个字符,一个是 space
,第二个是 |
管道。
$variable = wp_list_categories('style=none&echo=0');
$variable = str_replace('<br />', '|', $variable);
var_dump($variable);
echo substr($variable,0,strlen($variable)-2);
如果您在类别名称前后使用带 space 的管道,则使用 -4
代替 -2
另一种方法是使用 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;
旁注:这将是一个肮脏的解决方案,但如果你有更复杂的操作要完成,最好只使用 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();
我有以下代码,它从我的 wordpress 博客中获取类别,并用管道替换所有换行符。
<?php $variable = wp_list_categories('style=none&echo=0'); ?>
<?php $variable = str_replace('<br />', ' | ', $variable); ?>
<?php echo $variable; ?>
代码有效 - 但我需要忽略最后一次出现的情况。 有什么解决办法吗?
谢谢!
试试 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;
将 str_replace
与类别变量一起使用时 return 类别 |
管道在类别名称
所以你可以删除最后两个字符,一个是 space
,第二个是 |
管道。
$variable = wp_list_categories('style=none&echo=0');
$variable = str_replace('<br />', '|', $variable);
var_dump($variable);
echo substr($variable,0,strlen($variable)-2);
如果您在类别名称前后使用带 space 的管道,则使用 -4
代替 -2
另一种方法是使用 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;
旁注:这将是一个肮脏的解决方案,但如果你有更复杂的操作要完成,最好只使用 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();