下面列出了PHP PDO中mySQL查询的输出。该对象包含来自两个表的多个列,然后将这些列组合到一个对象中。
同一个表中的某些行是列parent_ID
标识的其他行。然后,这些孩子需要像孩子一样被添加到父母的对象中,依此类推。
尽管我可以简单地为前两个级别的孩子实现这一点,但是如果没有执行另一个foreach来实现这一目标,我就无法实现这一目标。
这个例子应该增加上述内容:
foreach($components as $component){
if($component->parent_ID < 0){
$output->{$component->ID} = $component;
}
else if($output->{$content->parent_ID}){
$output->{$content->parent_ID}->child->{$component->ID} = $component;
}
else if($output->?->child->{$conent->parent_ID}){
$output->?->child->{$content->parent_ID}->child->{$component->ID} = $component;
}
}
不在第三行有一个?通常会有ID的地方。这是因为我们现在不知道该ID是什么。在第一层我们做了因为它是parent_ID,但是这一行正在处理父母子女的子女。
答案 0 :(得分:1)
所以,我到目前为止我从评论中理解并假设你在DB中没有很多记录,在我看来,最好的方法是从DB预加载所有行然后构建使用此功能的树
public function buildTree(array &$objects) {
/** thanks to tz-lom */
$index = array();
$relations = array();
foreach($objects as $key => $object) {
$index[$object->getId()] = $object->setChildren(array());
$relations[$object->getParentId()][] = $object;
if ($object->getParentId()) {
unset($objects[$key]);
}
}
foreach ($relations as $parent => $children) {
foreach ($children as $_children) {
if ($parent && isset($index[$parent])) {
$index[$parent]->addChildren($_children->setParent($index[$parent]));
}
}
}
return $this;
}
P.S。实际上,foreach
中没有foreach
,我看不到其他方式。至少,它不是递归的