2017-06-02 91 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>'; 
     } 
    }