好的,我的语法可以在没有代码的情况下进行描述。基本上它应该很容易......但绝不是。
我连续有2个循环......基本上是一样的。我从我的数据库中选择*每个变量,然后我需要基于两个sep构建一个2层的javascript。变量
所以
我有:
while ($row = mysql_fetch_array($myVariable)) {
// do events
}
之后
while ($row2 = mysql_fetch_array($myVariable)) {
// do events
}
由于某种原因它在第二个上完全返回NOTHING ...是否有一些我需要重置我的阵列,它可能结束然后我不能只是重新启动。这是一个基本问题,但我无法弄清楚我的生活还有什么不对。那就是问题,这是一个普遍的问题,就是连续两次这样做,并期望PHP每次都在$ myVariable的开头处重新开始,它保存了我的SELECT语句?
谢谢......将全天检查并根据需要进行更新。 Stack Overflow的第一个计时器我很乐意看到帮助。
答案 0 :(得分:9)
问题是查询返回resource。这个资源有自己的内部指针(计数器记住要返回哪一行)。 mysql_fetch_array将推进该内部指针并一次从资源返回每一行。一旦它结束(不再有行),它返回false。所以在最后一个循环中,$ row等于false,退出while循环。但是指针没有重置。所以在下一个while循环中,你调用mysql_fetch_array,指针在结尾,所以它返回false,完全绕过第二个while循环。你应该做的是循环数据一次并将每一行存储到一个数组中。然后你可以根据需要复制/循环数组,一切都按预期工作。
$data = array();
while ($row = mysql_fetch_array($myVariable)) {
$data[] = $row;
}
//now $data has all the rows. a simple foreach will loop over the data.
foreach($data as $row){
//do events
print_r($row);
}
//and you can loop over data again and again.
foreach($data as $row){
//do events
print_r($row);
}
答案 1 :(得分:4)
在第二次循环之前,请尝试使用mysql_data_seek()
:
mysql_data_seek($myVariable, 0);
记录集中的指针需要重置,否则它仍会指示它在最后。
如ZiTAL指出的那样,将记录存储在数组中并迭代数组可能是一个更好的选择。
答案 2 :(得分:0)
如果您的循环是嵌套的,并且假设两个循环的$ myVariable相同,则只需复制它,然后每次循环遍历不同的副本。
$myVariable = mysql_result($query);
$myVariable2 = $myVariable;
while ($row = mysql_fetch_array($myVariable)) {
while ($row = mysql_fetch_array($myVariable2)) {
...
“使它成为一个数组”的另一个+1,但更好用。