4

ネストされたWhileステートメントのループをテストしたので:

$count1 = 0;

while ($count1 < 3) {
 $count1++;
 $count2 = 0;
 echo "count1: ".$count1."<br />";

    while ($count2 < 3) {
    $count2++;
    echo "count2: ".$count2."<br />";
    }
}

これは完全に機能し(それぞれ3回ループ)、次の結果が得られます。

count1: 1
 count2: 1
 count2: 2
 count2: 3
count1: 2
 count2: 1
 count2: 2
 count2: 3
count1: 3
 count2: 1
 count2: 2
 count2: 3

次に、mysql_fetch_assocを使用したループで同じことを試しました($ ContactsInterestsは2行の連想配列であり、$ LatesNewsには50行あります)。

$CI_count = 0;

while ($CI_Row = mysql_fetch_assoc($ContactsInterests)) { //loop thru interests
$CI_count++;
$LN_count = 0;
echo "CI_count: ".$CI_count."<br />";

while ($LN_Row = mysql_fetch_assoc($LatestNews)) { //loop thru news
    $LN_count++;
    echo "LN_count: ".$LN_count."<br />";

}
}

結果は次のとおりです。

CI_count: 1
 LN_count: 1
 LN_count: 2
 ...
 LN_count: 50
 LN_count: 51
CI_count: 2

しかし、LN_countの2回目の反復はどこにありますか?LN_countが2回目にインクリメントされなかった理由がわかりません。

感謝します。

4

4 に答える 4

5

mysql_fetch_assocは、「mysqlresult」タイプの反復を実行します。フェッチごとにインデックスを探します。次のような最初の結果に移動するには、mysql_data_seekを使用する必要があります。

<?php

    $CI_count = 0;

    while ($CI_Row = mysql_fetch_assoc($ContactsInterests)) { //loop thru interests
        $CI_count++;
        $LN_count = 0;
        echo "CI_count: ".$CI_count."<br />";

        mysql_data_seek($LatestNews,0);
        while ($LN_Row = mysql_fetch_assoc($LatestNews)) { //loop thru news
            $LN_count++;
            echo "LN_count: ".$LN_count."<br />";

        }
    }
于 2012-06-23T19:47:12.220 に答える
0

結果が尽きたからです。それらすべてを繰り返しました...もう一度ループしたい場合は、$LatestNews変数を再入力する必要があります。

于 2012-06-23T19:43:27.683 に答える
0

mysql_fetch_assoc() ソースの行を1つずつ取り出します。最初のループの2番目のステップに入ると、ソース変数に行がなくなります。

2番目のクエリの結果を配列に入れてから、配列をループする必要があります。mysql_fetch_assocは使用しません。

于 2012-06-23T19:43:29.997 に答える
0

mysql内部ポインタをリセットする必要があります。

http://php.net/mysql_data_seekを参照してください

于 2012-06-23T19:43:59.850 に答える