我正在尝试转换基本上采用以下形式的HTML块(每个列表项应该在一行上,所以如果你看到我的意思,那么不应该有任何包含<ul><li>
的行:
<ul>
<li>Item 1</li>
<li>
<ul>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</li>
<li>Item 4</li>
</ul>
但它可能有几层深。我基本上想把它转换成一个多维数组,其中的内容是值(实际内容有点详细,但我应该能够处理这些细节)。输出数组非常类似于以下内容:
$array[0]['value'] = "item 1";
$array[1][0]['value'] = "item 2";
$array[1][1]['value'] = "item 3";
$array[2]['value'] = "item 4";
答案 0 :(得分:2)
如果有人以后遇到这个问题,这就是答案......
function ul_to_array($ul){
if(is_string($ul)){
if(!$ul = simplexml_load_string($ul)) {
trigger_error("Syntax error in UL/LI structure");
return FALSE;
}
return ul_to_array($ul);
} else if(is_object($ul)){
$output = array();
foreach($ul->li as $li){
$update_with = (isset($li->ul)) ? ul_to_array($li->ul) : (($li->count()) ? $li->children()->asXML() : (string) $li);
if(is_string($update_with)){
if(trim($update_with) !== "" && $update_with !== null){
$output[] = $update_with;
}
} else {
$output[] = $update_with;
}
}
return $output;
} else {
return FALSE;
}
}
答案 1 :(得分:-1)
实现这一目标的最简单方法是使用递归函数,如下所示:
//output a multi-dimensional array as a nested UL
function toUL($array){
//start the UL
echo "<ul>\n";
//loop through the array
foreach($array as $key => $member){
//check for value member
if(isset($member['value']) ){
//if value is present, echo it in an li
echo "<li>{$member['value']}</li>\n";
}
else if(is_array($member)){
//if the member is another array, start a fresh li
echo "<li>\n";
//and pass the member back to this function to start a new ul
toUL($member);
//then close the li
echo "</li>\n";
}
}
//finally close the ul
echo "</ul>\n";
}
将数组传递给该函数,使其按照您想要的方式输出。
希望有所帮助!
此致 菲尔,