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>';
?>
あなたを助けるかもしれませあなたが必要とするdivをいくつ確認しますか?箱の外で考えようとするだけです。 (配列の長さ= 4、INITIAL divs、配列内の[key1] .lenght = 2、次に2 divs ...) –
本当に 'RecursiveIteratorIterator'を使用する必要がありますか?単純な再帰関数のように見えます。 –
を '$ iterator-> getDepth()'とすると、反復中のレベルを取得できます。その変化のテスト – splash58