【问题标题】:Sorting an array from a MYSQL output and omitting duplicate values从 MYSQL 输出中对数组进行排序并省略重复值
【发布时间】:2015-07-24 16:32:43
【问题描述】:

我的查询从我的数据库中返回包含年份数组的数据行。例如:

1 > 2004,2005,2006,2007 
2 > 2003,2004,2005 
3 > 2004,2005,2006,2007.

当我选择此数据时,我将其组合成一个数组,然后使用 array_unique 过滤掉重复项,但这不起作用。我返回一个包含所有值的完整数组。

mysql_query('select * from stock where Make LIKE "%'.$_REQUEST['Make'].'%" AND Model LIKE "%'.$_REQUEST['model'].'%" group by YearRange order by YearRange DESC');

while($row=mysql_fetch_array($Year)){
    $a = explode(',', $row['YearRange']);
    $unique_array = array_unique($a);
    foreach ($unique_array as $key => $value)
    {
        echo "<option>".$value."</option>";
    }
}

所以在上面的示例中,我只希望显示以下值: 2003,2004,2005,2006,2007 在每个&lt;option&gt;

我明白了:

2004,2005,2006,2007,2003,2004,2005,2004,2005,2006,2007 在每个&lt;option&gt;

【问题讨论】:

  • 您可以通过打印显示任何 $row['YearRange'] 值并将其放入代码中吗?
  • stop using mysql_* functions。它们不再被维护并且是officially deprecated。改为了解 prepared statements,并考虑使用 PDO,it's not as hard as you think
  • @anantkumarsingh 如果我回显 YearRange 我得到:1> 2004,2005,2006,2007 2> 2003,2004,2005 3> 2004,2005,2006,2007。
  • 你需要在explode之后将每个值添加到一个新数组中,然后唯一的新数组。
  • @JayBlanchard 我该怎么做?两个 foreach 循环?

标签: php mysql arrays select


【解决方案1】:

有几种方法可以解决这个问题。在我的示例中,我展示了一种非常冗长的方式,有两个 foreach() 循环 -

while($row=mysql_fetch_array($Year)){
    $a = explode(',', $row['YearRange']);
    foreach($a as $year){
        $allYears[] = $year; // each row contributes to one large array
    }
}

// now work with $allYears
$unique = array_unique($allYears);
sort($unique);

// generate your output
foreach ($unique as $key => $value){
   echo "<option>".$value."</option>";
}

原始代码中的部分问题在于,您每次都在覆盖唯一数组,而不是创建一个数组(在本例中为$allYears),然后从该数组中获取唯一值。您在 while 循环中的 foreach() 正在回显 row 中的唯一值,然后移动到下一行以回显下一组值。将输出移到 while 循环之外,您可以收集所有数据,对其进行操作,然后执行唯一值的输出。

另外,请stop using mysql_* functions。它们不再被维护并且是officially deprecated。改为了解 prepared statements,并考虑使用 PDO,it's not as hard as you think

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多