2017-06-02 14 views
0

SELF::FIRSTモードのRecursiveIteratorIteratorで未知の深度配列をループしたいと思います。PHP配列イテレータから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

あなたを助けるかもしれませあなたが必要とするdivをいくつ確認しますか?箱の外で考えようとするだけです。 (配列の長さ= 4、INITIAL divs、配列内の[key1] .lenght = 2、次に2 divs ...) –

+0

本当に 'RecursiveIteratorIterator'を使用する必要がありますか?単純な再帰関数のように見えます。 –

+0

を '$ iterator-> getDepth()'とすると、反復中のレベルを取得できます。その変化のテスト – splash58

答えて

0

使用この再帰関数

は)それは多分「array.lenght(のラインの間でsmthngを使用して

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>'; 
     } 
    } 
関連する問題