【问题标题】:PHP Build ol li nested list by multidimensional array givenPHP通过给定的多维数组构建ol li嵌套列表
【发布时间】:2014-07-08 10:54:52
【问题描述】:

我有一个包含许多嵌套子级别的多维数组,我想将其打印为格式良好的 ol li ol li ... 列表。所以我创建了这个函数,但是它不能正常工作:

    function loop($array) {
    echo '<ol class="dd-list">';
    $arrayObj = new ArrayObject($array);        
    foreach ( $iterator = $arrayObj->getIterator() as $key => $value ) {
        if(is_array($value)) {
            loop($iterator->current());
        } else {
            if($iterator->key()=='position') {
                echo '<li class="dd-item" data-id="' . $iterator->current() . '">';
                    echo '<div class="dd-handle">' . $iterator->key()  . '  ' . $iterator->current() . '</div>';
                echo '</li>';
            }                                           
        }
    }       
    echo '</ol>';
}   

我该如何解决? 给定的数组是:

Array
(
[item] => Array
    (
        [0] => Array
            (
                [ID] => 22063
                [position] => 1
                [disegno] => Disegno 22063
                [items] => Array
                    (
                        [item] => Array
                            (
                                [0] => Array
                                    (
                                        [ID] => 22315
                                        [position] => 1.1
                                        [disegno] => Disegno 22315
                                    )

                                [1] => Array
                                    (
                                        [ID] => 22064
                                        [position] => 1.2
                                        [disegno] => 
                Disegno 22064

                                    )

                                [2] => Array
                                    (
                                        [ID] => 22065
                                        [position] => 1.3
                                        [disegno] => 
            Disegno 22065

                                        [items] => Array
                                            (
                                                [item] => Array
                                                    (
                                                        [0] => Array
                                                            (
                                                                [ID] => 22065_1
                                                                [position] => 1.3.1
                                                                [disegno] => 
                        Disegno 22065_1

                                                            )

                                                        [1] => Array
                                                            (
                                                                [ID] => 22065_2
                                                                [position] => 1.3.2
                                                                [disegno] => 
                        Disegno 22065_2

                                                            )

                                                    )

                                            )

                                    )

                                [3] => Array
                                    (
                                        [ID] => 22068
                                        [position] => 1.4
                                        [disegno] => 
            Disegno 22068

                                    )

                            )

                    )

            )

        [1] => Array
            (
                [ID] => 24728
                [position] => 2
                [disegno] => 
    Disegno 24728

            )

        [2] => Array
            (
                [ID] => 445
                [position] => 3
                [disegno] => 
    Disegno 445

            )

        [3] => Array
            (
                [ID] => 21318
                [position] => 4
                [disegno] => 
    Disegno 21318

            )

    )

)

【问题讨论】:

  • 它为每个“li”构建“ol”,这是错误的,因为我想为嵌套的“li”组使用“ol”,而不是为单个“li”。
  • 请多解释。有什么问题?
  • 我想要一个这样的列表:ol li ol li li /ol /li /ol 当我错误地有这样的东西时:ol li /ol ol li /ol。我够清楚了吗?
  • 你最终找到答案了吗?

标签: php jquery arrays multidimensional-array iteration


【解决方案1】:

我把迭代器排除在外。也许我遗漏了一些东西,但它似乎过度复杂化了一个简单的问题。

另外,为了实现你想要的,在某些时候你必须给 div 的 data-id 属性一个数组,而不是一个值。我在下面的代码中更改了它,以便它接收密钥 - 但我想你应该更改它;

代码如下:

function loop($array) {
    echo '<ol class="dd-list">';
    echo "\n";
    foreach ( $array as $key => $value ) {
        //this is the line I was talking about earlier
        echo '<li class="dd-item" data-id="' . $key . '">';
        if(is_array($value)) {
            loop($value);
        } else {
            echo '<div class="dd-handle">' . $key  . ' => ' . $value . '</div>';
        }
        echo '</li>';
        echo "\n";                                  
    }       
    echo '</ol>';
}   

$testArray = array('1', '2', array('3', '4'));
loop($testArray);

它在这里工作:http://3v4l.org/ahiI9

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    相关资源
    最近更新 更多