2017-06-02 56 views
0

我想通过RecursiveIteratorIteratorSELF::FIRST模式下与RecursiveArrayIterator一起遍历未知深度数组。PHP Array迭代器到DIV

如果数组的值是一个数组,我将打开一个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>'; 

?> 
+0

也许使用的“array.lenght线之间smthng() “检查你需要多少个div?只是想在箱子外面思考。 (数组的长度= 4,4 INITIAL divs,在数组[key1] .lenght = 2,然后2 div更多......) –

+0

你真的需要使用'RecursiveIteratorIterator'吗?它看起来像一个简单的递归函数。 –

+0

用'$ iterator-> getDepth()'你可以得到你迭代时的水平。测试其变化 – splash58

回答

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>'; 
     } 
    }