PHP将多层次深度的UL添加到数组中
<?php
$ul = '<ul>
<li>Item 1</li>
<li>Item 2
<ul>
<li>Sub Item 1</li>
<li>Sub Item 2</li>
</ul>
</li>
</ul>';
// Create a new DOMDocument instance //创建一个新的DOMDocument实例。
$doc = new DOMDocument();
// Load the HTML string into the document instance. //将HTML字符串加载到文档实例中。
$doc->loadHTML($ul);
// Get all of the list items from the document. //从文档中获取所有的列表项。
$listItems = $doc->getElementsByTagName('li');
// Initialize an empty array to store our list items in. //初始化一个空数组来存储我们的列表项。
$itemsArray = array();
foreach ($listItems as $listItem) { //遍历所有的列表项,并将其添加到数组中。
addListItemToArray($listItem, 0, $itemsArray); //将每个LI元素添加到数组中,并使用递归方法处理UL子元素。
}
function addListItemToArray(DOMElement $item, int $level, &$array) { //定义函数,将LI元素及对应子UL添加进数组中:
if (isset($array[$level])) { //如果当前层已存在于数组中,就在该层后面追加LI元素内容:
array_push($array[$level], trim($item->nodeValue)); //trim() 函数用于去除字符串首尾处的 空格或者 其他 预定义字 符。 //array_push() 函数向 数 组 添 加 新 元 素 ( 向 数 组 末 峁 插 入 ) 。 //nodeValue 返回节点的值(text content)
} else {
$array[$level] = [trim($item->nodeValue)]; //如果当前层不存在于数组中,就在该层上直接设定LI元素内容
}
foreach ($item->childNodes as $childNode) { //遍历子节点(此处是UL),并递归处理:
if ($childNode instanceof DOMElement && strtolower($childNode->tagName == 'ul')) { //如果子节
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!