2010-01-02 14 views
0

我有一個嵌套的無序列表像這樣(簡體版/深度是可變的):在PHP如何取消巢嵌套的列表

<ul> 
<li> 
<a href="#">Root</a> 
    <ul> 
    <li> 
     <a href="#">Page A</a> 
     <ul> 
     <li> 
     <a href="#" title="Page A1">Page 1 2</a> 
     </li> 
     </ul> 
    </li> 
    </ul> 
</li> 
</ul> 

使用PHP,是有一個很好的方式「爆炸」這嵌套列表(在這個例子中)3個列表?

感謝您的幫助

編輯:

預期結果將是:

<ul> 
    <li> 
    <a href="#">Root</a> 
    </li> 
</ul> 

<ul> 
    <li> 
     <a href="#">Page A</a> 
    </li> 
</ul> 

<ul> 
    <li> 
    <a href="#" title="Page A1">Page 1 2</a> 
    </li> 
</ul> 
+0

-1不清楚的問題 – 2010-01-02 17:44:36

+0

什麼是你期望的輸出? – Gumbo 2010-01-02 17:44:59

+1

我認爲這是一個非常複雜的操作,不管你使用什麼方法,但是一個好的開始是將你的文檔加載到http://php.net/dom,然後用xpath查詢提取你的ul元素爲'// ul' 。然後,您必須執行一些額外的工作來從返回的結果中去除任何子ul元素,將恢復的節點移動到新文檔中,然後將其序列化回標記。 – 2010-01-02 17:54:51

回答

-1

嘗試:

$lists = '<ul> 
<li> 
<a href="#">Root</a> 
    <ul> 
     <li> 
      <a href="#">Page A</a> 
      <ul> 
       <li> 
       <a href="#" title="Page A1">Page 1 2</a> 
       </li> 
      </ul> 
     </li> 
    </ul> 
</li> 
</ul>'; 

$list_array = explode('<ul>', $lists); 
foreach($list_array as $list){ 
    // Now you have a single list, but missing the <ul> 
    // at the start. replace that and assign to a variable or whatever. 
} 
+0

這不會產生所需的輸出 - 前兩個結果將沒有結束標記,第三個結果將有3組結束標記。 – 2010-01-02 17:51:19

+0

是的,還有別的:如果每個列表有多個項目,它將不會工作 – Amir 2010-01-02 17:57:02

+0

非常正確。咖啡還在醞釀......我需要耐心等待,早上喝一些。 – menkes 2010-01-02 18:40:09