PHP中while和foreach的循环
我似乎不能去上班。也许我没有正确地理解它 这是我的密码:PHP中while和foreach的循环,php,mysql,foreach,Php,Mysql,Foreach,我似乎不能去上班。也许我没有正确地理解它 这是我的密码: $statement = "SELECT * FROM categories ORDER BY name ASC"; $query = mysql_query($statement) ... ... $cals = array("sports","general","other","clubs"); foreach ($cals as $value) { /* echo "<h3>".$value."</h3&g
$statement = "SELECT * FROM categories ORDER BY name ASC";
$query = mysql_query($statement)
...
...
$cals = array("sports","general","other","clubs");
foreach ($cals as $value)
{
/* echo "<h3>".$value."</h3>";
*/ echo "<table width='100%'>";
while ($array = mysql_fetch_array($query))
{
if ($array['calendar'] == $value)
{?>
<tr>
<td><?php echo $array['name']; ?></td>
<td><a onclick="update_form('<?php echo $array['name']; ?>', '<?php echo $array['calendar']; ?>')" href="#">Edit</a></td>
</tr>
<?php }
}
echo "</table><br />Value: $value";
}
试试这个
$result = mysql_query($query);
while ($array = mysql_fetch_array($result)) {
...
}
试试这个
$result = mysql_query($query);
while ($array = mysql_fetch_array($result)) {
...
}
首先,只是风格问题。您可以考虑将变量$Quy重命名为$结果。它保存的是查询的结果,而不是查询本身 问题是您没有重置$results。在第一个表之后,您已经遍历了整个数组。当您到达末尾,并且没有更多的行需要迭代时,mysql\u fetch\u assoc返回false 所以试试这个:
foreach ($cals as $value)
{
while ($array = mysql_fetch_array($query))
{
if ($array['calendar'] == $value)
{
?>
<tr>
<td><?php echo $array['name']; ?></td>
<td><a onclick="update_form('<?php echo $array['name']; ?>', '<?php echo $array['calendar']; ?>')" href="#">Edit</a></td>
</tr>
<?php
}
}
echo "</table><br />Value: $value";
mysql_data_seek($query,0); // <=== Set the resultsets internal pointer back to zero (the first record).
}
最重要的一点是第二行到最后一行的mysql_data_seek
如果您愿意,您也可以将mysql\u data\u seek粘贴在while行之前。您只需要确保对于foreach循环的每次迭代,在点击while之前都重置了数组指针
编辑:s/reset/mysql\u data\u seek/首先,只是一个风格点。您可以考虑将变量$Quy重命名为$结果。它保存的是查询的结果,而不是查询本身 问题是您没有重置$results。在第一个表之后,您已经遍历了整个数组。当您到达末尾,并且没有更多的行需要迭代时,mysql\u fetch\u assoc返回false 所以试试这个:
foreach ($cals as $value)
{
while ($array = mysql_fetch_array($query))
{
if ($array['calendar'] == $value)
{
?>
<tr>
<td><?php echo $array['name']; ?></td>
<td><a onclick="update_form('<?php echo $array['name']; ?>', '<?php echo $array['calendar']; ?>')" href="#">Edit</a></td>
</tr>
<?php
}
}
echo "</table><br />Value: $value";
mysql_data_seek($query,0); // <=== Set the resultsets internal pointer back to zero (the first record).
}
最重要的一点是第二行到最后一行的mysql_data_seek
如果您愿意,您也可以将mysql\u data\u seek粘贴在while行之前。您只需要确保对于foreach循环的每次迭代,在点击while之前都重置了数组指针
编辑:s/reset/mysql\u data\u seek/mysql\u fetch\u数组返回按整数索引的数组,如果要更改asoc数组
while ($array = mysql_fetch_array($query))
对此
while ($array = mysql_fetch_assoc($query))
如果要更改asoc数组,请使用mysql\u fetch\u数组返回按整数索引的数组
while ($array = mysql_fetch_array($query))
对此
while ($array = mysql_fetch_assoc($query))
正如jcubic和timdev指出的,编写的代码存在一些问题。但是,您尝试使用的算法效率非常低,因为它会对每种日历类型的整个结果集进行循环。相反,您可以在SQL中使用多列排序一次完成:
$query = "SELECT * FROM categories ORDER BY calendar, name";
$results = mysql_query($results)
...
...
$last_cal = '';
while ($array = mysql_fetch_assoc($query))
{
if (!$last_cal) {
echo '<table>';
}
else if ($array['calendar'] != $last_cal) {
echo '</table>';
echo '<table>';
}
?>
....HTML for table row...
<?php
$last_cal = $array['calendar'];
}
正如jcubic和timdev指出的,编写的代码存在一些问题。但是,您尝试使用的算法效率非常低,因为它会对每种日历类型的整个结果集进行循环。相反,您可以在SQL中使用多列排序一次完成:
$query = "SELECT * FROM categories ORDER BY calendar, name";
$results = mysql_query($results)
...
...
$last_cal = '';
while ($array = mysql_fetch_assoc($query))
{
if (!$last_cal) {
echo '<table>';
}
else if ($array['calendar'] != $last_cal) {
echo '</table>';
echo '<table>';
}
?>
....HTML for table row...
<?php
$last_cal = $array['calendar'];
}
查看一组样本数据真的很有帮助。这看起来基本上是正确的,虽然我不确定下一个电话是关于什么的。我把它处理掉了。我只是在尝试一些东西…哈哈…一个数据样本…比如数据库里有什么?我看看能不能弄点什么。好吧,我不确定如何提供一些样本数据,但我补充了一些信息。一个是体育,一个是俱乐部,还有一个是普通的这是3个值。但你说过有5个。这就是你的主要问题@Col.Shrapnel-嗯,我无法获得任何超过第一个foreach数组值的值,所以我确实认为这会产生很大影响。查看一组样本数据确实会有帮助。这看起来基本上是正确的,虽然我不确定下一个电话是关于什么的。我把它处理掉了。我只是在尝试一些东西…哈哈…一个数据样本…比如数据库里有什么?我看看能不能弄点什么。好吧,我不确定如何提供一些样本数据,但我补充了一些信息。一个是体育,一个是俱乐部,还有一个是普通的这是3个值。但你说过有5个。这就是你的主要问题@Col.Shrapnel-我无法获得任何超过第一个foreach数组值的值,所以我认为它产生了很大的影响。你正确的部分是,在迭代所有数组项之前,你将耗尽记录,但重置$query;不会有帮助的。@Salman A-你当然是对的$查询是一个结果集,而不是数组。答案更新了,这就成功了。非常感谢。我也在研究这里发布的一些其他方法。你已经搞定了这一部分,它说你将在迭代所有数组项之前耗尽记录,但是重置$query;不会有帮助的。@Salman A-你当然是对的$查询是一个结果集,而不是数组。答案更新了,这就成功了。非常感谢。我也在研究这里发布的一些其他方法。实际上,现在我们总是使用两个循环——一个用于获取数据,一个用于输出。非常方便。解析该注释时遇到问题。当1个循环可以完成时,有2个循环有什么好处?为什么需要一个循环来获取数据?db fetch只是几个语句。实际上,现在我们总是使用两个循环——一个用于获取数据,一个用于输出。非常方便。解析该注释时遇到问题。当1个循环可以完成时,有2个循环有什么好处?为什么需要一个循环来获取数据?db fetch只是几个语句。mysql_fetch_array-将结果行作为关联数组、数字数组、,
或两者[默认情况下]:mysql\u fetch\u array-将结果行作为关联数组、数字数组或两者[默认情况下]: