将段落变为无序列表

时间:2016-08-01 15:46:53

标签: php list explode

我正在使用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:它也应该作为有序列表。

3 个答案:

答案 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>';

祝你好运。