我测试了循环嵌套的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没有再次增加。
帮助表示赞赏。
答案 0 :(得分:4)
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 />";
}
}
答案 1 :(得分:0)
因为结果已经用尽了。你已经迭代了所有这些...如果你想再次循环,你必须重新填充$ LatestNews变量。
答案 2 :(得分:0)
mysql_fetch_assoc()
逐个取出源的行,当你在第一个循环的第二步时,你将不会在源变量中有任何行。
您需要将第二个查询的结果放在一个数组中,然后循环该数组,而不是使用mysql_fetch_assoc。
答案 3 :(得分:0)
您需要重置mysql内部指针: