PHP:转换&LT; UL&GT; &LT;立GT;树HTML标记到一个数组 [英] PHP: Convert <ul> <li> Tree HTML tag to an array
问题描述
我使用jsTree,我需要转换此HTML标签树code &LT; UL&GT; &LT;立GT;
来一个PHP数组。
该jsTree HTML标记将被传递给PHP进行解析,并存储在一个结构树PHP数组(参见下面的PHP数组结构)。
的其他问题的:是我期望的PHP数组结构好,或者你可以提出一个良好的结构?我很开放的建议。
在此先感谢:)
干杯,
马克
jsTree截图
HTML树字符串
&LT; UL类=升&GT;
&LT;李ID =phtml_1级=开放&GT;
其中p风格=级=的href =#&GT;&LT;插件&GT;&安培; NBSP;&LT; / INS&GT;文件夹1&LT; / A&GT;
&LT; UL&GT;
&LT;李班=叶ID =phtml_2&GT;
其中p风格=级=的href =#&GT;&LT;插件&GT;&安培; NBSP;&LT; / INS&gt;儿童1.1&LT; / A&GT;
&LT; /李&GT;
&LT;李班=打开ID =phtml_3&GT;
其中p风格=级=的href =#&GT;&LT;插件&GT;&安培; NBSP;&LT; / INS&GT;文件夹1.1&LT; / A&GT;
&LT; UL&GT;
&LT;李班=叶最后一个相对=默认&GT;
LT&; A HREF =的风格=级=&GT;&LT;&插件GT;&安培; NBSP;&LT; / INS&gt;儿童1.1.1&LT; / A&GT;
&LT; /李&GT;
&LT; / UL&GT;
&LT; /李&GT;
&LT;李班=最后打开的rel =默认&GT;
LT&; A HREF =的风格=级=&GT;&LT;&插件GT;&安培; NBSP;&LT; / INS&GT;文件夹1.2 LT; / A&GT;
&LT; UL&GT;
&LT;李班=叶子的rel =默认&GT;
LT&; A HREF =的风格=级=&GT;&LT;&插件GT;&安培; NBSP;&LT; / INS&gt;儿童1.2.1&LT; / A&GT;
&LT; /李&GT;
&LT;李班=叶最后一个相对=默认&GT;
LT&; A HREF =的风格=级=&GT;&LT;&插件GT;&安培; NBSP;&LT; / INS&gt;儿童1.2.2&LT; / A&GT;
&LT; /李&GT;
&LT; / UL&GT;
&LT; /李&GT;
&LT; / UL&GT;
&LT; /李&GT;
&LT;李ID =phtml_5级=打开文件&GT;
其中p风格=级=的href =#&GT;&LT;插件&GT;&安培; NBSP;&LT; / INS&GT;文件夹2'; / A&GT;
&LT; UL&GT;
&LT;李班=叶子的rel =默认&GT;
LT&; A HREF =的风格=级=&GT;&LT;&插件GT;&安培; NBSP;&LT; / INS&gt;儿童2.1&LT; / A&GT;
&LT; /李&GT;
&LT;李班=叶最后一个相对=默认&GT;
LT&; A HREF =的风格=级=点击&GT;&LT;插件&GT;&安培; NBSP;&LT; / INS&gt;儿童2.2&LT; / A&GT;
&LT; /李&GT;
&LT; / UL&GT;
&LT; /李&GT;
&LT;李班=叶最后一个相对=默认&GT;
LT&; A HREF =的风格=级=&GT;&LT;&插件GT;&安培; NBSP;&LT; / INS&GT;外子&lt; / A&GT;
&LT; /李&GT;
&LT; / UL&GT;
PHP阵列结构
&LT; PHP
$ tree_array =阵列(
文件夹1'=&GT;阵列(
儿童1.1',
文件夹1.1'= GT;阵列(
儿童1.1.1
)
文件夹1.2'= GT;阵列(
孩子1.2.1,
儿童1.2.2
)
)
文件夹2'=&GT;阵列(
儿童2.1',
儿童2.2
)
外儿童
);呼应'&LT; pre&GT;',的print_r($ tree_array),'&LT; / pre&GT;';
?&GT;
PHP的print_r输出
阵列
(
[文件夹1] =&GT;排列
(
[0] =&GT;儿童1.1
[文件夹1.1] =&GT;排列
(
[0] =&GT; 1.1.1儿童
) [文件夹1.2] =&GT;排列
(
[0] =&GT; 1.2.1儿童
[1] =&GT; 1.2.2儿童
) ) [文件夹2] =&GT;排列
(
[0] =&GT;儿童2.1
[1] =&GT;儿童2.2
) [0] =&GT;外儿童
)
关于:
我有一个很难解析字符串HTML标签并将其保存在一个PHP数组我的问题。
块引用>我建议你使用一个HTML解析器,如 simplehtmldom 。这将允许您通过HTML DOM遍历只是你想要的方式。
下面是一个快速和肮脏的UL步行脚本:
&LT; PHP
require_once(simplehtmldom / simple_html_dom.php);
$ DOM = file_get_html(TEST.HTM);
$ ARR =阵列();
功能WalkUL($ UL,&安培; $ AR)
{
的foreach($ UL-GT&;儿童$礼)
{
如果($俪&gt;标签=礼!)
{
继续;
}
$阿拉尔=阵列();
的foreach($俪&GT;儿童$ ULUL)
{
如果($ ulul-&GT;!标记=UL)
{
继续;
}
WalkUL($ ULUL,$阿拉尔);
}
$ AR [$俪&GT;找到(A,0) - &GT;明文] = $阿拉尔;
}
}
WalkUL($ DOM-&GT;找到(UL,0),$ ARR);
的print_r($ ARR);
?&GT;它的输出,而不是完全按照你想要它,但接近:
阵列
(
[文件夹1] =&GT;排列
(
[儿童1.1] =&GT;排列
(
)
[文件夹1.1] =&GT;排列
(
[儿童1.1.1] =&GT;排列
(
)
)
[文件夹1.2] =&GT;排列
(
[儿童1.2.1] =&GT;排列
(
)
[儿童1.2.2] =&GT;排列
(
)
)
)
[文件夹2] =&GT;排列
(
[儿童2.1] =&GT;排列
(
)
[儿童2.2] =&GT;排列
(
)
)
[外儿童] =&GT;排列
(
)
)I'm using jsTree and I need to convert this HTML tag tree code
<ul> <li>
to a PHP array. The jsTree HTML tag will be passed to PHP to be parsed and store in a structured tree PHP array(see below for the PHP array structure).Additional question: Is my desired PHP array structure good or you can suggest a good structure? I'm open for suggestions.
Thanks in advance :)
Cheers, Mark
jsTree Screenshot:
HTML Tree String:
<ul class="ltr"> <li id="phtml_1" class=" open"> <a style="" class=" " href="#"><ins> </ins>Folder 1</a> <ul> <li class="leaf" id="phtml_2"> <a style="" class=" " href="#"><ins> </ins>Child 1.1</a> </li> <li class="open" id="phtml_3"> <a style="" class=" " href="#"><ins> </ins>Folder 1.1</a> <ul> <li class="leaf last" rel="default"> <a href="" style="" class=" "><ins> </ins>Child 1.1.1</a> </li> </ul> </li> <li class="last open" rel="default"> <a href="" style="" class=" "><ins> </ins>Folder 1.2</a> <ul> <li class="leaf" rel="default"> <a href="" style="" class=" "><ins> </ins>Child 1.2.1</a> </li> <li class="leaf last" rel="default"> <a href="" style="" class=" "><ins> </ins>Child 1.2.2</a> </li> </ul> </li> </ul> </li> <li id="phtml_5" class="file open"> <a style="" class=" " href="#"><ins> </ins>Folder 2</a> <ul> <li class="leaf" rel="default"> <a href="" style="" class=" "><ins> </ins>Child 2.1</a> </li> <li class="leaf last" rel="default"> <a href="" style="" class="clicked"><ins> </ins>Child 2.2</a> </li> </ul> </li> <li class="leaf last" rel="default"> <a href="" style="" class=" "><ins> </ins>Outer Child</a> </li> </ul>
PHP Array Structure:
<?php $tree_array = array( 'Folder 1' => array( 'Child 1.1', 'Folder 1.1' => array( 'Child 1.1.1' ), 'Folder 1.2' => array( 'Child 1.2.1', 'Child 1.2.2' ), ), 'Folder 2' => array( 'Child 2.1', 'Child 2.2' ), 'Outer Child' ); echo '<pre>',print_r($tree_array),'</pre>'; ?>
PHP print_r Output:
Array ( [Folder 1] => Array ( [0] => Child 1.1 [Folder 1.1] => Array ( [0] => Child 1.1.1 ) [Folder 1.2] => Array ( [0] => Child 1.2.1 [1] => Child 1.2.2 ) ) [Folder 2] => Array ( [0] => Child 2.1 [1] => Child 2.2 ) [0] => Outer Child )
解决方案Regarding:
My problem I'm having a hard time parsing the string HTML tag and save it in a PHP array.
I suggest that you use an HTML parser, such as simplehtmldom. This will allow you to traverse over HTML DOM just the way you want.
Here is a quick and dirty UL walking script:
<?php require_once( "simplehtmldom/simple_html_dom.php" ); $DOM = file_get_html( "test.htm" ); $ARR = array( ); function WalkUL( $ul, &$ar ) { foreach( $ul->children as $li ) { if ( $li->tag != "li" ) { continue; } $arar = array( ); foreach( $li->children as $ulul ) { if ( $ulul->tag != "ul" ) { continue; } WalkUL( $ulul, $arar ); } $ar[ $li->find( "a", 0 )->plaintext ] = $arar; } } WalkUL( $DOM->find( "ul", 0 ), $ARR ); print_r( $ARR ); ?>
Its output, not exactly as you wanted it but close:
Array ( [Folder 1] => Array ( [Child 1.1] => Array ( ) [Folder 1.1] => Array ( [Child 1.1.1] => Array ( ) ) [Folder 1.2] => Array ( [Child 1.2.1] => Array ( ) [Child 1.2.2] => Array ( ) ) ) [Folder 2] => Array ( [Child 2.1] => Array ( ) [Child 2.2] => Array ( ) ) [Outer Child] => Array ( ) )
这篇关于PHP:转换&LT; UL&GT; &LT;立GT;树HTML标记到一个数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!