2016-08-01 4 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> 

방법이 고정 될 수 있는가? 거기에 다른 해결책을 고칠 수 있습니까? 미리 감사드립니다! 추신 : 주문 목록으로도 작동해야합니다.

답변

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>')의 결과는 다음과 같은 배열로 나타납니다. 첫 번째 <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>'; 

행운을 빈다.