4

我测试了循环嵌套的 While 语句,所以:

$count1 = 0;

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

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

这完美地工作(每个循环三次),结果:

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 是一个两行关联数组,$LatestNews 有 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 的第二次迭代在哪里?我不明白为什么 LN_count 没有第二次增加。

帮助表示赞赏。

4

4 回答 4

5

mysql_fetch_assoc对“mysql 结果”类型进行迭代。为每次提取寻找索引。你必须使用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() 一个接一个地取出源的行,当您进入第一个循环的第二步时,源变量中不会有任何行。

您需要将第二个查询的结果放入一个数组中,然后循环该数组,而不是使用 mysql_fetch_assoc。

于 2012-06-23T19:43:29.997 回答
0

您需要重置mysql内部指针:

http://php.net/mysql_data_seek

于 2012-06-23T19:43:59.850 回答