PHP:转换< UL> <立GT;树HTML标记到一个数组 [英] PHP: Convert <ul> <li> Tree HTML tag to an array

查看:202
本文介绍了PHP:转换< UL> <立GT;树HTML标记到一个数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用jsTree,我需要转换此HTML标签树code < UL> <立GT; 来一个PHP数组。
该jsTree HTML标记将被传递给PHP进行解析,并存储在一个结构树PHP数组(参见下面的PHP数组结构)。

其他问题的:是我期望的PHP数组结构好,或者你可以提出一个良好的结构?我很开放的建议。

在此先感谢:)

干杯,
马克

jsTree截图

HTML树字符串

 < UL类=升>
<李ID =phtml_1级=开放>
    其中p风格=级=的href =#><插件>&安培; NBSP;< / INS>文件夹1< / A>
    < UL>
    <李班=叶ID =phtml_2>
        其中p风格=级=的href =#><插件>&安培; NBSP;< / INS>儿童1.1< / A>
    < /李>
    <李班=打开ID =phtml_3>
        其中p风格=级=的href =#><插件>&安培; NBSP;< / INS>文件夹1.1< / A>
        < UL>
        <李班=叶最后一个相对=默认>
            LT&; A HREF =的风格=级=><&插件GT;&安培; NBSP;< / INS>儿童1.1.1< / A>
        < /李>
        < / UL>
    < /李>
    <李班=最后打开的rel =默认>
        LT&; A HREF =的风格=级=><&插件GT;&安培; NBSP;< / INS>文件夹1.2 LT; / A>
        < UL>
        <李班=叶子的rel =默认>
            LT&; A HREF =的风格=级=><&插件GT;&安培; NBSP;< / INS>儿童1.2.1< / A>
        < /李>
        <李班=叶最后一个相对=默认>
            LT&; A HREF =的风格=级=><&插件GT;&安培; NBSP;< / INS>儿童1.2.2< / A>
        < /李>
        < / UL>
    < /李>
    < / UL>
< /李>
<李ID =phtml_5级=打开文件>
    其中p风格=级=的href =#><插件>&安培; NBSP;< / INS>文件夹2'; / A>
    < UL>
    <李班=叶子的rel =默认>
        LT&; A HREF =的风格=级=><&插件GT;&安培; NBSP;< / INS>儿童2.1< / A>
    < /李>
    <李班=叶最后一个相对=默认>
        LT&; A HREF =的风格=级=点击><插件>&安培; NBSP;< / INS>儿童2.2< / A>
    < /李>
    < / UL>
< /李>
<李班=叶最后一个相对=默认>
    LT&; A HREF =的风格=级=><&插件GT;&安培; NBSP;< / INS>外子< / A>
< /李>
< / UL>

PHP阵列结构

 < PHP
$ tree_array =阵列(
    文件夹1'=>阵列(
        儿童1.1',
        文件夹1.1'= GT;阵列(
            儿童1.1.1
        )
        文件夹1.2'= GT;阵列(
            孩子1.2.1,
            儿童1.2.2
        )
    )
    文件夹2'=>阵列(
        儿童2.1',
        儿童2.2
    )
    外儿童
);呼应'< pre>',的print_r($ tree_array),'< / pre>';
?>

PHP的print_r输出

 阵列

    [文件夹1] =>排列
        (
            [0] =>儿童1.1
            [文件夹1.1] =>排列
                (
                    [0] => 1.1.1儿童
                )            [文件夹1.2] =>排列
                (
                    [0] => 1.2.1儿童
                    [1] => 1.2.2儿童
                )        )    [文件夹2] =>排列
        (
            [0] =>儿童2.1
            [1] =>儿童2.2
        )    [0] =>外儿童


解决方案

关于:


  我有一个很难解析字符串HTML标签并将其保存在一个PHP数组

我的问题。


我建议你使用一个HTML解析器,如 simplehtmldom 。这将允许您通过HTML DOM遍历只是你想要的方式。

下面是一个快速和肮脏的UL步行脚本:

 < PHP
    require_once(simplehtmldom / simple_html_dom.php);
    $ DOM = file_get_html(TEST.HTM);
    $ ARR =阵列();
    功能WalkUL($ UL,&安培; $ AR)
    {
        的foreach($ UL-GT&;儿童$礼)
        {
            如果($俪>标签=礼!)
            {
                继续;
            }
            $阿拉尔=阵列();
            的foreach($俪>儿童$ ULUL)
            {
                如果($ ulul->!标记=UL)
                {
                    继续;
                }
                WalkUL($ ULUL,$阿拉尔);
            }
            $ AR [$俪>找到(A,0) - >明文] = $阿拉尔;
        }
    }
    WalkUL($ DOM->找到(UL,0),$ ARR);
    的print_r($ ARR);
?>

它的输出,而不是完全按照你想要它,但接近:

 阵列

    [文件夹1] =>排列
        (
            [儿童1.1] =>排列
                (
                )
            [文件夹1.1] =>排列
                (
                    [儿童1.1.1] =>排列
                        (
                        )
                )
            [文件夹1.2] =>排列
                (
                    [儿童1.2.1] =>排列
                        (
                        )
                    [儿童1.2.2] =>排列
                        (
                        )
                )
        )
    [文件夹2] =>排列
        (
            [儿童2.1] =>排列
                (
                )
            [儿童2.2] =>排列
                (
                )
        )
    [外儿童] =>排列
        (
        )

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>&nbsp;</ins>Folder 1</a>
    <ul>
    <li class="leaf" id="phtml_2">
        <a style="" class=" " href="#"><ins>&nbsp;</ins>Child 1.1</a>
    </li>
    <li class="open" id="phtml_3">
        <a style="" class=" " href="#"><ins>&nbsp;</ins>Folder 1.1</a>
        <ul>
        <li class="leaf last" rel="default">
            <a href="" style="" class=" "><ins>&nbsp;</ins>Child 1.1.1</a>
        </li>
        </ul>
    </li>
    <li class="last open" rel="default">
        <a href="" style="" class=" "><ins>&nbsp;</ins>Folder 1.2</a>
        <ul>
        <li class="leaf" rel="default">
            <a href="" style="" class=" "><ins>&nbsp;</ins>Child 1.2.1</a>
        </li>
        <li class="leaf last" rel="default">
            <a href="" style="" class=" "><ins>&nbsp;</ins>Child 1.2.2</a>
        </li>
        </ul>
    </li>
    </ul>
</li>
<li id="phtml_5" class="file open">
    <a style="" class=" " href="#"><ins>&nbsp;</ins>Folder 2</a>
    <ul>
    <li class="leaf" rel="default">
        <a href="" style="" class=" "><ins>&nbsp;</ins>Child 2.1</a>
    </li>
    <li class="leaf last" rel="default">
        <a href="" style="" class="clicked"><ins>&nbsp;</ins>Child 2.2</a>
    </li>
    </ul>
</li>
<li class="leaf last" rel="default">
    <a href="" style="" class=" "><ins>&nbsp;</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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆