php foreach внутри foreach - PullRequest
       7

php foreach внутри foreach

1 голос
/ 25 декабря 2011

То, чего я пытаюсь добиться, - это напечатать результат так:

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 класс оболочки , насколько я знаю, у меня нет выбора, кроме как использовать «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.

Я пробовал несколько других методов, но безуспешно, надеюсь, кто-то обнаружит проблему в моем коде и поведет меня в правильном направлении.

Заранее спасибо и с Рождеством.

Ответы [ 4 ]

1 голос
/ 25 декабря 2011

Вам нужно сбросить $ link_row непосредственно перед этой строкой: foreach($linkQry AS $LinkRes)

1 голос
/ 25 декабря 2011
//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");
}
1 голос
/ 25 декабря 2011
$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.
0 голосов
/ 25 декабря 2011

пусто $link_row до 2-го цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...