Php Zend framework foreach循环停止第一次迭代

Php Zend framework foreach循环停止第一次迭代,php,zend-framework,foreach,tree,Php,Zend Framework,Foreach,Tree,我实际上在为ZF工作。我有一个分类表,我想用它创建一个树,以便按如下方式显示数据: Category --Sub cat 1 --Sub cat 2 ----Su sub cat 1 Another Category --Sub cat 1 //...etc... $tree = array(); foreach($data as $parent){ $tree[$parent->name] = array(); foreach($data as $child){

我实际上在为ZF工作。我有一个分类表,我想用它创建一个树,以便按如下方式显示数据:

Category
--Sub cat 1
--Sub cat 2
----Su sub cat 1
Another Category
--Sub cat 1
//...etc...
$tree = array();
foreach($data as $parent){
    $tree[$parent->name] = array();
    foreach($data as $child){
        if($child->parent_id == $parent->id){
            $tree[$parent->name][] = $child->name;
        }
    }
}
我正在使用
fetchAll
方法获取所有数据。一切都很好。但我现在正试图将我的树创建为一个双foreach循环,如下所示:

Category
--Sub cat 1
--Sub cat 2
----Su sub cat 1
Another Category
--Sub cat 1
//...etc...
$tree = array();
foreach($data as $parent){
    $tree[$parent->name] = array();
    foreach($data as $child){
        if($child->parent_id == $parent->id){
            $tree[$parent->name][] = $child->name;
        }
    }
}
问题是循环在
main
循环第一次迭代后停止,所以我只得到第一个父级及其子类别,但它不会继续到第二个父级

我的数据库表包含以下字段:

id, name, parent_id
有什么想法吗

编辑 多亏了你Thibault,它使用了好的
for
循环:

for($i=0;$i<count($data);$i++){
    $tree[$data[$i]->name] = array();
    for($j=0;$j<count($data);$j++){
        if($data[$j]->parent_id == $data[$i]->id){
            $tree[$data[$i]->name][] = $data[$j]->name;
        }
    }
}
($i=0;$iname]=array()的
;
对于($j=0;$jparent\u id==$data[$i]->id){
$tree[$data[$i]->name][]=$data[$j]->name;
}
}
}

两个
$data
变量的光标之间可能存在冲突

对于第二个
foreach
循环,应使用
$data
的副本

或者使用带有
$i
$j
索引的
for
循环,并通过
$data[$i]
$data[$j]
调用它们以访问数组,这样循环就不会出错

编辑 很高兴我能帮忙,但经过一些研究,我创建了以下代码:

<?

class o {
 public $id;
 public $name;
 public $parent_id;
 function __construct($_id,$_name,$_parent) {
  $this->id = $_id;
  $this->name = $_name;
  $this->parent_id = $_parent;
 }
}
$data = array(
 new o(1,'toto',0),
 new o(2,'truc',1),
 new o(3,'machin',1),
 new o(4,'bidule',2),
 new o(5,'titi',3),
 new o(6,'tutu',3),
);


$tree = array();
foreach($data as $parent){
    $tree[$parent->name] = array();
    foreach($data as $child){
        if($child->parent_id == $parent->id){
            $tree[$parent->name][] = $child->name;
        }
    }
}

print_r($tree);

你确定你得到的不止一个类别吗?嗨,谢谢你的回答。是的,我有几个类别从数据库返回。我已经检查过了,所以我不明白为什么它会这样断开。另外,如果我删除第二个循环,一切都很好,循环工作正常。嗨,我之前已经在两个不同的变量中复制了一份数据,名为
$parents
$children
但仍无法解决问题。此外,ZF将数据作为对象返回给我,因此我无法使用
$data[$I]