2016-08-01 94 views
1

我正在使用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:它也應該作爲有序列表工作。

回答

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

您可能希望把條件更復雜抓空格,製表符,或者你不希望包括其他p標籤的內容。

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>標記的左側沒有任何內容。正如其他人所建議的,有些方法可能會忽略第一個元素,但仍然需要處理殘留的標記,這會使HTML變得混亂。

0

因此,根據您提供的內容,您可以使用一些「黑客」解決方案來解決此問題,但很難根據提供的內容給出明確的解決方案。如果這只是第一個項目發生的一切的時候,你可以簡單地跳過循環的第一次迭代中,像這樣:

$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>'; 

祝你好運。