这是我的问题。我从mysql数据库返回结果并使用for循环来回显结果。虽然它变得有点复杂,因为我使用一些表数据嵌套在其他结果中。这段代码在一个名为“西班牙”的div中返回“Pablo Picasso”,很好,但如果西班牙也有“El Greco”,那么我会得到两个“西班牙”div,而不仅仅是那个。
所以:我只想为表列中的每个唯一值返回一次结果,而不是每一个都返回一次。
$results = array();
while ($row = mysql_fetch_assoc($result)) {
$results[] = $row;
}
foreach ($results as $row)
{
echo "<div class=\"".$row['country']."\">".$row['country'];
echo "<div class=\"Box\">";
$tempCountry = $row['country'];
foreach ($results as $row)
{
if ($row['country']== $tempCountry) echo "<div>artists name</div>";
}
echo "</div>";echo "</div>";
}
我想知道它是否是嵌套循环的构造,或其他什么,我不知道!请帮忙
答案 0 :(得分:1)
我同意@Kalpesh您需要按国家/地区订购结果。
现在你有多个嵌套循环,而你真正需要的只是一个。尝试只使用一个循环来浏览数据。在每次迭代时,检查$ tempCountry值以查看它与当前行的国家/地区是否不同。如果是,则需要关闭当前<div>
,打开新的<div>
并更新$ tempCountry值。否则,请回显艺术家的名字。
编辑:下面添加了Psuedocode
请注意,您不希望第一次通过循环关闭div标记。此外,您需要在循环结束后关闭div标记。
foreach ($results as $row) {
if ($tempCountry == $row['country']) {
echo "<div class=\"Box\">";
echo "<div>artist</div></div>";
}
else {
$tempCountry == $row['country'];
echo "</div><div class=\"".$row['country']."\">".$row['country'];
echo "<div class=\"Box\">";
echo "<div>artist</div></div>";
}
echo "</div>";
}
答案 1 :(得分:0)
在循环外创建一个空数组。在输出时将$ row的值推入循环内的数组中。然后仅在数组中尚不存在值时输出。您可以使用in_array。
答案 2 :(得分:0)
我找到的解决方案是将foreach嵌套在另一个中,外部循环SELECTS与GROUP BY。 在这个示例中,我为每个国家/地区获得一个外部,然后在该国家/地区内(或该列值)中的每个人(或项目)。真有用。
新代码:解决方案(使用GROUP BY构建外部容器)
// create array to build group div
$country = mysql_query("SELECT * FROM table GROUP BY `country`");
// create array for inner contents
$result = mysql_query("SELECT * FROM table ORDER BY name");
//array for group(countries in this instance)
$countrys = array();
while ($row = mysql_fetch_assoc($country)) {
$countrys[] = $row;
}
//array for inner contents
$results = array();
while ($row = mysql_fetch_assoc($result)) {
$results[] = $row;
}
$tempCountry="";
foreach ($countrys as $row)
{
$tempCountry = $row['country'];
echo "<div class=\"".$row['country']."\">";
echo $row['country'];
echo "<div class=\"Box\">";
foreach ($results as $row) {
if ($tempCountry == $row['country'])
{
echo"<div>inner contents of that group</div>";
}
}
echo "</div>";
echo "</div>";
}