PHP数组迭代器到DIV

时间:2017-06-02 08:38:04

标签: php arrays iterator

我想在RecursiveIteratorIterator模式下使用SELF::FIRSTRecursiveArrayIterator循环遍历未知深度数组。

如果数组值是一个数组,我将打开一个DIV,所以"子阵列"将在这个DIV里面。像

这样的东西
$array = array(
    'key0' => '0',
    'key1' => array(
        'value0' => '1',
        'value1' => '2',
    ),
    'key2' => '3',
    'key3' => array(
        'value2' => '4',
        'value3' => array(
            'value4' => '5'
        ),
        'value4' => array(
            'value5' => '6'
        ),
    ),
);

那么HTML应该是:

<div>
    <div>
        <p>key0 is 0</p>
    </div>
    <div>
        <p>key1</p>
        <div>
            <p>value0 is 1</p>
            <p>value1 is 2</p>
        </div>
    </div>
    <div>
        <p>key2 is 3</p>
    </div>
    <div>
        <p>key3</p>
        <div>
            <p>value2 is 4</p>
            <p>value3</p>
            <div>
                <p>value4 is 5</p>
            </div>
            <p>value4</p>
            <div>
                <p>value5 is 6</p>
            </div>
        </div>
    </div>
</div>

但问题是我的代码每次只能关闭1个<div>标记。我不知道怎么记得有多深。所以我可以接近for循环和echo </div>

我目前的代码:

<?php

    echo '<div>';

    $iterator      = new RecursiveIteratorIterator(new RecursiveArrayIterator($iterator_array), RecursiveIteratorIterator::SELF_FIRST);
    $is_start      = true;
    $last_element  = '';

    foreach($iterator as $key => $value) {
        if(is_array($value) && $is_start) {

            echo '<div><p>' . $key . '</p>';

            $is_start     = false;
            $last_element = end($value);
        } elseif(is_array($value) && !$is_start) {

            echo '</div><div><p>' . $key . '</p>';

            $last_element = end($value);
        } elseif(!is_array($value)) {

            echo '<div><p>' . $key . ' is ' . $value . '</p></div>';

            if($last_element == $value) {
                echo '</div>';
            }
        }
    }

    echo '</div>';

?>

1 个答案:

答案 0 :(得分:0)

使用此递归函数

可能会帮助你

    get_div($array);
    function get_div($arr) {
        foreach($arr as $k => $a){
            echo '<div>';
            if(is_array($a)) {
                echo "<p>".$k."</p>";
                get_div($a);
            } else {
                echo "<p>".$k." is ".$a."</p>";
            }
            echo '</div>';
        }
    }