【发布时间】:2020-09-01 15:39:39
【问题描述】:
根据我的 SQL 数据库中的条目数,我有一个小表被多次复制,假设是关于颜色的。这些表格将随着每个新条目向右移动一个位置。在其中,我现在希望在每个条目中能够自动输出几个字段。例如,单个表条目可能是“reds”,现在我想显示不同的红色阴影,即“shade1”、“shade2”、“shade3”、“shade4”,然后下一个条目可能是'黄色',我希望它显示添加的黄色,即'shade1','shade2'。我的代码是这样的:
<?php
error_reporting(E_ALL ^ E_NOTICE);
$stmt = $conn->prepare("SELECT * FROM colours");
$stmt->execute();
$colours = $stmt->fetchALL();
if($colours){
$i = 1;
foreach ($colours as $key => $colour) {
$coloursrow1 .='<table >
<tr><th>' . "<b>{$colour['colour']}</b>" . '</th></tr>
<tr><td>' . "<img src='{$colour['shade1']}' />" . '</td></tr>
<tr><td>' . "<img src='{$colour['shade2']}' />" . '</td></tr>
<tr><td>' . "<img src='{$colour['shade3']}' />" . '</td></tr>
<tr><td>' . "<img src='{$colour['shade4']}' />" . '</td></tr>
</table>';
$i++;
}
}
?>
我想知道是否可以代替<tr><td>' . "<img src='../colours/reds/shade1.jpg' />" . '</td></tr> 之类的所有行,而可以写一些类似
if($colours){
$i = 1; $x = 1;
foreach ($colours as $key => $colour) {
$coloursrow1 .='<table >
<tr><th>' . "<b>{$colour['colour']}</b>" . '</th></tr>';
}
while ($x < 6) {
'<tr><td>' . "<img src='{$colour['shade$x']}' />" . '</td></tr>';
$x++;
}
foreach ($colours as $key => $colour) {
'</table>';
$i++;
}
}
这样它就可以自动抓取并输出它们,还让我能够限制可以输出的数量。
我尝试了不同的方法来实现这一点,但我总是陷入死胡同。我一定是做错了什么(?)
【问题讨论】:
-
$colour仅在foreach()的范围内,因此将while()括起来将不会像您预期的那样起作用。 -
我现在知道这有多大意义,但是当我尝试将
while ()包含到foreach ($colours as colour) {}中时,它会处理 30 秒,然后超时并出现错误。我也不明白其中的问题。 -
可能是因为
$i++被丢弃并且它是一个无限循环(最多执行 30 秒)。 -
啊!这向我解释了一些事情,因为我以前发生过这种情况。在这种情况下,我将如何设置上限?把整个东西放在另一个
while ($i < 8) {}?
标签: php sql if-statement foreach while-loop