0

这是我的问题。我正在从 mysql 数据库返回结果并使用 for 循环来回显结果。虽然它变得有点复杂,因为我正在使用一些表数据嵌套在其他结果中。此代码在名为“Spain”的 div 中返回“Pablo Picasso”,很好,但如果西班牙也有“El Greco”,那么我会得到两个“Spain”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>";
}

不知是嵌套循环的构造,还是别的什么,不知道!!!请帮忙

4

3 回答 3

1

我同意@Kalpesh,您需要按国家/地区订购结果。

现在你有多个嵌套循环,而你真正需要的只是一个。尝试只使用一个循环来遍历数据。在每次迭代中,检查 $tempCountry 值以查看它与当前行的国家/地区相比是否不同。如果是,您需要关闭当前的<div>,打开一个新的<div>并更新 $tempCountry 值。否则,呼应艺术家的名字。

编辑:下面添加了伪代码

  • 从数据库中检索数据(查询应按国家/地区对数据进行排序)
  • 将 $tempCountry 初始化为 null
  • 循环遍历每一行
    • 如果 $tempCountry 等于该行所在的国家/地区
      1. 打印艺术家
    • 别的
      1. 设置 $tempCountry 等于该行的 Country
      2. 关闭 div 标签
      3. 打开一个新的 div 标签
      4. 打印艺术家

请注意,您不想在第一次通过循环时关闭 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>";

}
于 2012-07-12T17:40:26.027 回答
0

在循环之外创建一个空数组。在输出时,将 $row 的值推送到循环内的数组中。然后仅在数组中不存在值时才输出。您可以为此使用in_array 。

于 2012-07-12T17:35:22.373 回答
0

我找到的解决方案是将一个 foreach 嵌套在另一个内部循环中,即带有 GROUP BY 的外部循环 SELECTS。在此示例中,我为每个国家/地区获取一个外部,然后在该内部,该国家(或具有该列值)的每个人(或项目)。真的很有用。

新代码:解决方案(使用 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>";
    }
于 2012-08-01T15:05:01.613 回答