我有重复循环的问题。我有db table site_pages
,我在那里存储网页(cms),并且那些页面可以让父whitch与某些表中的parent_id
相关。
一般希望用这些可伸缩的方式达到这种效果。
|—
如果是root,如果有一个孩子
|—|—
如果有两个孩子
|—|—|—
三个孩子......
以上是我想要的效果。但就我而言,我得到了这个效果。在页面标题之前没有重复的两个分隔符。
这是我的数组循环:
Array
(
[0] => Array
(
[id] => 1
[title] => Home
)
[1] => Array
(
[id] => 2
[title] => About us
[children] => Array
(
[0] => Array
(
[id] => 5
[title] => Subpage #1
[children] => Array
(
[0] => Array
(
[id] => 6
[title] => Subpage #2
)
)
)
)
)
我循环pages
数组的代码:
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Page name</th>
<th>Status</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php if($pages): ?>
<?php foreach ($pages as $index => $page): ?>
<tr>
<td><span class="gi">|—</span><?= $page['title'];?></td>
<td><?= $page['status'];?></td>
<td>N/A</td>
</tr>
<?php if(!empty($page['children'])): ?>
<?= fetchChilds($page['children']); ?>
<?php endif;?>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
这里是子循环辅助函数:
function fetchChilds($pages) {
$html = "<tr>";
foreach ($pages as $child) {
$html .= '<td> <span class="gi">|—</span>'. $child["title"] .'</td>';
$html .= '<td>'. $child["status"] .'</td>';
$html .= '<td> N/A</td>';
if(isset($child['children'])) {
$html .= fetchChilds($child['children']);
}
}
$html .= "</tr>";
return $html;
}
答案 0 :(得分:2)
没有。输出中没有重复的分隔符。因为每个表行(为什么要使用表?)只包含一个| - 前缀。
如果没有完全重写代码,我唯一的想法是为fetchChilds添加一个level-param。
function fetchChilds($pages, $level) {
foreach ($pages as $child) {
$html = "<tr>";
$html .= '<td> <span class="gi">'. str_repeat("|-", $level); .'</span>'. $child["title"] .'</td>';
$html .= '<td>'. $child["status"] .'</td>';
$html .= '<td> N/A</td>';
$html .= "</tr>";
if(isset($child['children'])) {
$html .= fetchChilds($child['children'], $level+1);
}
}
return $html;
}
然后你需要为你的其他代码添加一个级别:
<?php if($pages): ?>
<?php foreach ($pages as $index => $page): ?>
<tr>
<td><span class="gi">|—</span><?= $page['title'];?></td>
<td><?= $page['status'];?></td>
<td>N/A</td>
</tr>
<?php if(!empty($page['children'])): ?>
<?= fetchChilds($page['children'],2); ?>
<?php endif;?>
<?php endforeach; ?>
<?php endif; ?>
如果您执行该步骤,您可能会发现最顶层的数组级别为1级,并且也可以在fetchChilds中使用:
<?php if($pages): ?>
<?php foreach ($pages as $index => $page): ?>
<?= fetchChilds($page,1); ?>
<?php endforeach; ?>
<?php endif; ?>