我无法删除数组中的重复项

时间:2012-05-21 07:47:42

标签: php arrays merge

我有这个: 具有产品且每种产品的表格具有多于1种颜色,例如:

  1. 玻璃有红色,绿色
  2. 球有红色,绿色,黄色
  3. 我想只获得一次颜色,但是使用波纹管代码我会为每个产品收到不同的数组.. array_merge不知何故不会将所有数组合并到一个数组中..请帮助我:

    1. 将数组合并为一个
    2. 删除新数组中的dublicated颜色。
    3. $query='SELECT GROUP_CONCAT(DISTINCT colors SEPARATOR ", ") FROM products WHERE colors!="" GROUP BY colors';
      
      $result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);
      $num_rows=mysql_num_rows($result);
      
      if($num_rows){
        while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
      
        $array = array($row[0]);
      
        $colors = array_merge($array);
      
        var_dump($colors ); 
      
      }
      

4 个答案:

答案 0 :(得分:1)

您是否只想要一系列不考虑产品的颜色?试试这个:

SELECT DISTINCT colors FROM products WHERE colors != ''

我猜这里,但我认为你的颜色列只是一个逗号分隔的颜色列表。这不是真正做这种事情的最佳方式,但无论如何......尝试上面的查询,然后在php

$result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);
$num_rows=mysql_num_rows($result);

if($num_rows){
$colors = array();
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

    $array = explode(',' $row[0]);  // your row is just a string, explode it to get an array
    $colors = array_merge($colors, $array); // merge that into the colors array
}

$colors = array_map('trim', $colors); // in case there was any whitespace in your color strings
$colors = array_filter($colors); // remove any empties
$colors = array_unique($colors); // strip out the dupes

答案 1 :(得分:0)

不要对颜色进行CONCAT,而是以每种颜色获得一行的方式重写SQL。将它们全部添加到数组中,然后运行array_filter()

答案 2 :(得分:0)

$query='SELECT DISTINCT colors FROM products WHERE colors !=""';
$result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);
$colors = array();
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    $colors[] = $row[0]; 
}
var_dump($colors); 

答案 3 :(得分:0)

如果我正确地理解了你的问题,意味着你想要单个数组,包含所有项目中的所有颜色,并且这个数组必须是唯一的,你应该执行以下操作:你应该在while循环中声明$colors ,然后用检查提供的颜色是否在array_merge数组中的函数替换$colors,如果没有,则添加到它。代码如下:

$query='SELECT GROUP_CONCAT(DISTINCT colors SEPARATOR ", ") FROM products WHERE colors!="" GROUP BY colors';

$result=mysql_query($query) or die('Mysql Error:'.mysql_error().'<br /> Query:'.$query);
$num_rows=mysql_num_rows($result);
$colors=array();
if($num_rows){
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

$array = array($row[0]);

$colors = array_merge($array);


}
$colors=array_unique($input);
var_dump($colors);