2011-12-25 59 views
1

我想實現的是能夠打印的結果是這樣的:PHP的foreach

Header 1 
    Link 1 
    Link 2 
Header 2 
    Link 3 
Header 3 
    Link 4 
    Link 5 

但下面的代碼是打印結果是這樣的:

Header 1 
    Link 1 
    Link 2 
Header 2 
    Link 1 
    Link 2 
    Link 3 
Header 3 
    Link 1 
    Link 2 
    Link 3 
    Link 4 
    Link 5 

使用php pdo wrapper class,據我所知,我別無選擇,只能用「foreach」代替「while」來循環結果,這裏是我的代碼:

$bind = array(":users_id" => $id); 
$categoryQry = $db->select("category","users_id=:users_id", $bind); 
//loop Headers 
foreach($categoryQry AS $CatRes){ 
    $category_name = $CatRes['category_name']; 

    $bind = array(
     ":users_id" => $id, 
     ":link_category" => $CatRes['category_id'] 
    ); 
    $linkQry = $db->select("links", "users_id=:users_id AND link_category=:link_category", $bind); 
    //loop Links under each header 
    foreach($linkQry AS $LinkRes){ 
     $link_url = $LinkRes['link_url']; 
     //$link_row outputs the links under each header, this is where the problem is   
     $link_row .= DisplayLayout("link_row.html","\$link_url"); 
    } 

    //$header outputs the result OK (3 headers as stated in above example)  
    $header .= DisplayLayout("header.html","\$category_name,\$link_row"); 
} 
//note that DisplayLayout is my template function which is used for outputting variables using an HTML file. 

我一直在嘗試其他幾種不用運氣的方法,希望有人能夠在我的代碼中發現問題並引導我走向正確的方向。

預先感謝您和聖誕快樂。

+1

$ link_row只會被加入,你需要在每個外環 – 2011-12-25 03:24:30

回答

1

你只需要這一行之前重置$ link_row:foreach($linkQry AS $LinkRes)

+0

這就是事情的邏輯身邊,我忽略了後清空。感謝指針,解決了我的問題。 – 100d 2011-12-25 04:00:34

1
$bind = array(":users_id" => $id); 
$categoryQry = $db->select("category","users_id=:users_id", $bind); 
//loop Headers 
foreach($categoryQry AS $CatRes){ 
$category_name = $CatRes['category_name']; 

$bind = array(
    ":users_id" => $id, 
    ":link_category" => $CatRes['category_id'] 
); 
$linkQry = $db->select("links", "users_id=:users_id AND link_category=:link_category", $bind); 
//loop Links under each header 
$link_row=''; 
foreach($linkQry AS $LinkRes){ 
    $link_url = $LinkRes['link_url']; 
    //$link_row outputs the links under each header, this is where the problem is   
    $link_row .= DisplayLayout("link_row.html","\$link_url"); 
} 

//$header outputs the result OK (3 headers as stated in above example)  
$header .= DisplayLayout("header.html","\$category_name,\$link_row"); 
} 
//note that DisplayLayout is my template function which is used for outputting  variables using an HTML file. 
1
//reset linkrow 
$link_row = ''; 


foreach($linkQry AS $LinkRes){ 
    $link_url = $LinkRes['link_url']; 
    //$link_row outputs the links under each header, this is where the problem is   
    $link_row .= DisplayLayout("link_row.html","\$link_url"); 
} 
0

第二循環開始前空$link_row