2013-04-04 144 views
1

我實際上在ZF上工作。我有一個類別表與,我想爲了得到如下顯示的數據來創建樹:Zend框架foreach循環停止吃了第一次迭代

Category 
--Sub cat 1 
--Sub cat 2 
----Su sub cat 1 
Another Category 
--Sub cat 1 
//...etc... 

我使用fetchAll方法來得到我的所有數據。 Everyting工作正常。但隨後我現在試圖建立我的樹成如下雙foreach循環:

$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 

任何想法?

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; 
     } 
    } 
} 
+0

您確定您獲得超過1個類別嗎? – Perry 2013-04-04 08:01:48

+0

嗨,謝謝你的回答。是的,我有幾個類別的數據庫返回。我已經檢查過,所以我不明白爲什麼它會這樣打破。此外,如果我刪除第二個循環,一切都很好,循環工作 – lkartono 2013-04-04 08:05:09

回答

0

你可能有兩個遊標變量$data之間的衝突:

編輯 感謝您蒂博,它使用好老for循環做的工作。

您應該使用第foreach循環的副本$data

或者使用for循環與$i$j指數,並通過$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); 

而且你的代碼工作得很好: (一定出事了別的地方... )

Array 
(
    [toto] => Array 
     (
      [0] => truc 
      [1] => machin 
     ) 

    [truc] => Array 
     (
      [0] => bidule 
     ) 

    [machin] => Array 
     (
      [0] => titi 
      [1] => tutu 
     ) 

    [bidule] => Array 
     (
     ) 

    [titi] => Array 
     (
     ) 

    [tutu] => Array 
     (
     ) 

) 
+0

嗨,我已經做了一個數據副本之前在2個不同的變量稱爲'$父母'和'$子女',但它仍然不會解決這個問題。另外,ZF將數據作爲對象返回給我,所以我不能使用'$ data [$ i]' – lkartono 2013-04-04 08:09:59