【问题标题】:Getting rid of duplicates in PHP while loop摆脱 PHP while 循环中的重复项
【发布时间】:2013-10-12 03:32:49
【问题描述】:

这是我的 php 代码:

$sql1 = "SELECT year FROM reports ORDER BY year DESC";
$res1 = mysql_query($sql1);
while($row = mysql_fetch_array($res1)) {
    $selectYear = "
        <select id='select_year'>
            <option value='".$row['year']."'>".$row['year']."</option>
        </select>
    ";
}

我想要它做的只是输出一年,而不是它现在正在做的事情,即每年输出,一年中的每个月都有一个条目,所以同一年有 12 个条目,所以我的 html 是这个:

<select id='select_year'>
    <option value='2013'>2013</option>
    <option value='2013'>2013</option>
    <option value='2013'>2013</option>
    <option value='2013'>2013</option>
    <option value='2012'>2012</option>
</select>

但这正是我真正想要的:

<select id='select_year'>
    <option value='2013'>2013</option>
    <option value='2012'>2012</option>
</select>

这是按年份对所有结果进行排序,以便用户可以使用选择来选择他们想要查看的年份。

【问题讨论】:

  • 将第一个结果存储在一个变量中,并显示出来,下次获取时,在显示前与变量进行比较,如果匹配则什么都不做,否则显示并存储

标签: php html select duplicate-removal


【解决方案1】:

有很多方法可以做到这一点,但最简单的可能是:

$sql1 = "SELECT DISTINCT year FROM reports ORDER BY year DESC";

使用DISTINCT,数据库将只返回每个值之一。那么就不用在PHP端浪费任何资源处理数据了。

【讨论】:

    【解决方案2】:

    @Thomas Kelley 在上面给出了完美的答案。

    但是,如果你坚持使用 PHP 解决方案。您可以按如下方式进行。

    $res1 = mysql_query($sql1);
    $placeHolder = ",";
    while($row = mysql_fetch_array($res1)) {
        if ( strpos($placeHolder , $row['year']) )
            continue;
        $placeHolder .= $row['year'] .',';
        $selectYear = "
            <select id='select_year'>
                <option value='".$row['year']."'>".$row['year']."</option>
            </select>
        ";
    }
    

    【讨论】:

    • +1 用于 PHP 替代方案。虽然,与其将其添加到以逗号分隔的字符串列表中,不如将值推送到数组中,并使用in_array() 来确定它是否已经存在。字符串比较可能会变得昂贵且不精确(例如,如果值已经包含逗号)。
    • 好点@ThomasKelley。我还是个新手。今天学习新知识。
    猜你喜欢
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 2022-12-02
    • 2014-09-05
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多