私はforeachループの束に悩まされており、単純なforループまたは再帰関数にそれらを磨く方法があるかどうかを知りたいですか?私は相互に入れ子になった要素でHTMLを生成しようとしています。私が得ようとしているのは、配列の配列です。しかし、私はこれまでに作ったものをどのように前進させるのか分かりません。 誰かがこのモンスターをもっと覚えやすいものにする手伝ってもらえますか?ありがとうございました!複数のforeachループを 'for'ループまたは再帰関数に置き換えるにはどうすればよいですか?
ここに私のコードです:
$containers = DISPLAY::displayParentElements($data);
$subcontainers = DISPLAY::displayChildElements($data2);
foreach($containers as $parent) {
$parentDiv = $parent['parentDiv'];
echo '<div id="'.$parentDiv.'">';
foreach($subcontainers as $child) {
echo '<div id="'.$child['childDiv'].'">';
foreach($subcontainers as $grandChild) {
echo '<div id="'.$grandChild['grandChildDiv'].'">';
foreach($subcontainers as $greatGrandChild) {
echo '<div id="'.$greatGrandChild['greatGrandChildDiv'].'">';
echo '</div>';
}
echo '</div>';
}
echo '</div>';
}
echo '</div>';
}
結果はこのようになります。
Array
(
[attribute_value] => siteContainer
)
Array
(
[attribute_value] => header
)
Array
(
[attribute_value] => logoContainer
)
Array
(
[attribute_value] => logo
)
Array
(
[attribute_value] => logoText
)
Array
(
[attribute_value] => links
)
Array
(
[attribute_value] => contactInfo
)
Array
(
[attribute_value] => body
)
Array
(
[attribute_value] => longDiv
)
Array
(
[attribute_value] => shortDiv
)
Array
(
[attribute_value] => headerText
)
Array
(
[attribute_value] => greetings
)
:
<div id="siteContainer">
<div id="header">
<div id="logoContainer">/div>
<div id="logo"></div>
<div id="links"></div>
<div id="contactInfo">
<div id="logoText">
<div id="shortDiv">
<div class="headerText"></div>
</div>
</div>
</div>
</div>
<div id="body">
<div id="longDiv"></div>
<div id="greetings"></div>
</div>
<div>
を$containers
配列は、以下の情報を持っています
$subcontainers
配列はほとんど同じ情報を持っていますが、余分なキーを使用して:
Array
(
[parent_container_name] => siteContainer
[attribute_value] => header
)
Array
(
[parent_container_name] => header
[attribute_value] => logoContainer
)
Array
(
[parent_container_name] => header
[attribute_value] => logo
)
Array
(
[parent_container_name] => contactInfo
[attribute_value] => logoText
)
Array
(
[parent_container_name] => header
[attribute_value] => links
)
Array
(
[parent_container_name] => header
[attribute_value] => contactInfo
)
Array
(
[parent_container_name] => siteContainer
[attribute_value] => body
)
Array
(
[parent_container_name] => body
[attribute_value] => longDiv
)
Array
(
[parent_container_name] => logoText
[attribute_value] => shortDiv
)
Array
(
[parent_container_name] => shortDiv
[attribute_value] => headerText
)
Array
(
[parent_container_name] => body
[attribute_value] => greetings
)
私は、2つの配列が一つにのみ$containers
配列を使用して絞り込むことができかなり確信しています。
このコードは素晴らしいですが、期待どおりに動作しませんでした。しかし、なぜ値(例: 'siteContainer')を次の行にハードコードする必要があるのか不思議です: printChildren( 'siteContainer'、$ subcontainers); –
絶対的な親(例えば 'siteContainer')を見つける方法を含む、より多くの情報で新しい回答を作成しました。また、$ subcontainersをどのように定義したかも記載しました。そのコードが期待どおりに動作していないかの答え – Samuel