2011-01-31 15 views
0

入れ子のwhileループで問題が発生しました。私は三つのグループを一覧表示するには、この関数を作成しましたし、私が欲しい、各グループ内の別のループは、そのグループの4人のメンバーにリストアップする:入れ子になったWHILEループの問題

function getBlockCode_MainBody() { 
    global $oSysTemplate; 
    $allGroups = db_res("SELECT g.*, g.id AS ThisID, COUNT(m.id_profile) AS members FROM bx_groups_main AS g LEFT JOIN bx_groups_fans AS m ON g.id = m.id_entry GROUP BY g.id HAVING members >= 1 ORDER BY RAND() LIMIT 3"); 
    $i = 0; 
    while((true == ($groups = mysql_fetch_assoc($allGroups))) && ($i < 3)) { 
     $gid = $groups['ThisID']; 
     $members = db_res("SELECT * FROM bx_groups_fans WHERE id_entry = {$gid}"); 
     while($member = mysql_fetch_assoc($members)) { 
      $gid = $member['id_profile']; 
      $mKeys[] = array(
      'thumbnail' => $gid, 
     ); 
     } 
     $gKeys[] = array(
      'title' => $groups['title'], 
      'gid' => $groups['id'], 
      'bx_repeat:members' => $mKeys, 
     ); 
     $i++; 
    } 
    $aTemplateKeys = array(
     'bx_repeat:groups' => $gKeys, 
    ); 
    return $oSysTemplate -> parseHtmlByName('groups_main.html', $aTemplateKeys); 
} 

それは最初のループの罰金をリストだ(三つのグループが示されている)が、それぞれの内部グループネストされたループが機能していません。私はコンテンツのメンバーIDを使用しました。そこに、各グループ内の1人のユーザだけだ、とそのメンバーIDが1であると言うなら、それは出力:

GROUP 1 - 1 
GROUP 2 - 1 1 
GROUP 3 - 1 1 1 

ので、何らかの理由で、ネストされたループは、それが何をすべきより多くを実行し続けています。誰も助けることができますか?

答えて

2

あなたが各反復で$mKeys配列をクリアする必要があります。

// ... 
while((true == ($groups = mysql_fetch_assoc($allGroups))) && ($i < 3)) { 
    $mKeys = array(); 
    $gid = $groups['ThisID']; 
    // ... 
+0

は完全に働きました! – hohner

+0

ええ、PHPにはブロックレベルのスコープがありません。他の多くの言語では、これはそのまま動作していました。 – amphetamachine

2

試し$i++;

後:

unset($mKeys); 
関連する問題