我正在使用Wordpress,我正试图将所有段落变成一个有序列表,并且它的工作几乎完美。 我的代码:
$list_items1 = explode("<p>", $bulletlist);
echo '<ul>';
foreach($list_items1 as $list_item)
echo '<li>' . $list_item . '</li>';
echo '</ul>';
唯一的问题是,它在每个列表的开头创建一个空列表项,如下所示:
<ul>
<li></li>
<li>List item 1</li>
<li>List item 2</li>
<li>List item 3</li>
</ul>
如何解决这个问题?还有其他解决办法吗?提前致谢! PS:它也应该作为有序列表。
答案 0 :(得分:3)
可能的解决方案是将所有p>
替换为li>
。
$list_items = str_replace('p>', 'li>', $bulletlist);
echo '<ul>' . $list_items . '</ul>';
您的方法存在的问题是explode('<p>', '<p>a</p><p>b</p><p>c</p>')
会产生以下数组。
array(4) {
[0]=> string(0) ""
[1]=> string(5) "a</p>"
[2]=> string(5) "b</p>"
[3]=> string(5) "c</p>"
}
第一个元素为空,因为第一个<p>
标记的左侧没有任何内容。正如其他人所建议的那样,有一些变通方法可以忽略第一个元素,但是你仍然需要处理剩余的</p>
标签,这会弄乱你的HTML。
答案 1 :(得分:1)
似乎你的wordpress中可能有空的p标签。我会添加一个条件来捕获空的p标签。
$list_items1 = explode("<p>", $bulletlist);
echo '<ul>';
foreach($list_items1 as $list_item) {
if ($list_item != '') {
echo '<li>' . $list_item . '</li>';
}
}
echo '</ul>';
您可能希望使条件更复杂,以捕获您不希望包含的空格,制表符或其他标记内容。
答案 2 :(得分:0)
因此,根据您提供的内容,您可以使用一些“hacky”解决方案来解决此问题,但很难根据提供的内容提供明确的解决方案。如果这只发生在第一个项目上,你可以简单地跳过循环的第一次迭代:
$isFirstIteration = true;
$list_items1 = explode("<p>", $bulletlist);
echo '<ul>';
foreach($list_items1 as $list_item)
if(!$isFirstIteration){
echo '<li>' . $list_item . '</li>';
}else{
$isFirstIteration = false;
continue;
}
echo '</ul>';
或
你可以检查标签是否为空
$list_items1 = explode("<p>", $bulletlist);
echo '<ul>';
foreach($list_items1 as $list_item)
if(!empty($list_items1)){
echo '<li>' . $list_item . '</li>';
}
echo '</ul>';
祝你好运。