我需要通过数组递归建立一个类别表。只要深度越深,只要深度减小,HTML输出就会错过表的开始,它就可以正常工作。PHP类树递归
PHP代码来构建数组:
if($query->rowCount() > 0) {
while($result = $query->fetch(PDO::FETCH_OBJ)) {
$tree[] = $result;
}
$childs = array();
foreach($tree as $item) {
$childs[$item->parent_id][] = $item;
}
foreach($tree as $item) {
if (isset($childs[$item->id])) {
$item->childs = $childs[$item->id];
}
}
$tree = $childs[0];
}
else {
// no category blabla
}
这里是建表的功能。它无法正常工作。
function draw($tree) {
echo "<table border='1' width='300'>";
echo "<tr>";
echo "<td>Name</td><td>Depth</td><td>Parent</td>";
echo "</tr>";
foreach($tree as $key => $value) {
echo "<tr>";
echo "<td>".$value->name."</td>";
echo "<td>".$value->depth."</td>";
echo "<td>".$value->parent_id."</td>";
echo "</tr>";
if(isset($value->childs)) {
draw($value->childs);
}
}
echo "</table>";
}
按照要求HTML输出片段:
<table border='1' width='300'>
<tr>
<td>Name</td>
<td>Depth</td>
<td>Parent</td>
</tr>
<tr>
<td>Bad</td>
<td>5</td>
<td>5</td>
</tr>
<tr>
<td>Good</td>
<td>5</td>
<td>5</td>
</tr>
</table>
<!--- BREAK HAPPENS HERE----->
<tr>
<td>Both?</td>
<td>4</td>
<td>3</td>
</tr>
<table border='1' width='300'>
<tr>
<td>Name</td>
<td>Depth</td>
<td>Parent</td>
</tr>
<tr>
<td>dsadas</td>
<td>5</td>
<td>16</td>
</tr>
</table>
您是否介意通过在您的foreach中添加花括号来检查它是否按预期工作,并且如果上面的语句能够明确说明您的意思是什么?在FOREACH之后有一个IF可能是一个意外或故意的。请用大括号{}来澄清一下? – MyStream 2012-02-28 23:16:48
为什么你有回声“”;高于平局($ value-> childs);?摆脱结束表标记 – hackartist 2012-02-28 23:18:23
@MyStream阵列创建作为intendet。树数组的var_dump与它应该是一样的,以至于不存在这个问题。 hackartist:我忘了补充说,每次表跳转到一个新的深度,它应该重新发布表头。这就是为什么关闭表在那里。 编辑:即使删除它后,发生相同的表中断,以至于没有问题 – Sepix 2012-02-28 23:20:32