首页 > 解决方案 > 使用 PHP 将列出的项目从 DOM 字符串分解为数组

问题描述

我有一个格式化的 html 字符串,其中包含一些 UL 元素,并希望将其分解为一个 php 数组。

像:

<ul>

  <li>List 1
    <ul>
      <li>item 1</li>
      <li>item 2</li>
      <li>item 3</li>
    </ul>
  </li>

  <li>List 2
    <ul>
      <li>item 1</li>
      <li>item 2</li>
      <li>item 3</li>
    </ul>
  </li>

  <li>List 3
    <ul>
      <li>item 1</li>
      <li>item 2</li>
      <li>item 3</li>
    </ul>
  </li>
</ul>

我正在寻找的是一种将第一级 li 标签(包括其中的内容/结构)放入 php 数组的解决方案。我试过.split,但它很脆弱。搁浅在 DOMXpath... 有人吗?

标签: phparraysdom

解决方案


$str = '<ul>    
  <li>List 1
    <ul>
      <li>item 1</li>
      <li>item 2</li>
      <li>item 3</li>
    </ul>
  </li>

  <li>List 2
    <ul>
      <li>item 1</li>
      <li>item 2</li>
      <li>item 3</li>
    </ul>
  </li>

  <li>List 3
    <ul>
      <li>item 1</li>
      <li>item 2</li>
      <li>item 3</li>
    </ul>
  </li>
</ul>';

$doc = new DOMDocument();
$doc->loadHTML($str);
$elements = $doc->getElementsByTagName('body')->item(0)->childNodes;
$data = array();
foreach ($elements as $node) {
    foreach ($node->childNodes as $child) {  
        $data[]=$doc->saveHtml($child);
    }
}
foreach($data as $d)
    echo $d;

推荐阅读