多维数组从列和行中删除重复项

时间:2015-02-22 14:20:09

标签: php arrays csv multidimensional-array duplicates

我必须将excel文档中的一些数据插入到数据库中。 数据已保存为.csv,然后通过PHP添加到数组中。

数据如下:

Column A  Column B  Column C
100       200       100
50        10        100
200       200       100
30        10        300

然后我用它来分隔每个列(在foreach循环中)

list( $columnA, $columnB)   = explode( ',', $values[0] ); 
$columnA= array($columnA);
print_r($columnA);

上面的代码打印每列的值。 所以我试图找到一种方法从每列中删除重复项,然后从每一行中删除重复项(无论列名是什么)。我想从整个文档中删除重复项。对于我发布的数据,例如我只需要值100,200,50,10,30,300(只有整个文档中的唯一值)。

更新: 原始数组(我通过使用for循环并传递来自.CSV文件的所有数据创建的数组)显示:

Array ( [0] => G2100,100%,,,,,,,,,200,0.24,77,51,2,47, ) 
Array ( [0] => G2101,100%,,,,,,,,,200,0.24,77,42,15,43, ) 
Array ( [0] => G2102,30%,,,,,,,,,200,0.24,77,38,25,37, )

因此,通过使用我之前提到的列表函数,我将拆分所有列并获取每列的值。那么如果我打印$ columnB数组,例如它显示:

Array ( [0] => 100%) Array ( [0] => 100%) Array ( [0] => 30%) 

等等。当我使用unique_array时,它什么都不做。

$columnB = array_unique($columnB, SORT_REGULAR);

我尝试使用array_map,但它也没有用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我不明白为什么array_unique在你的情况下不起作用,因为实际上它解决了这个问题:

<?php

    $columnA = array(50,50,200,10);
    $columnB = array(100,50,200,100);
    $columnC = array(150,50,250);

    $merged = array_merge($columnA, $columnB, $columnC);

    $result = array_unique($merged);

    var_dump($result);

?>

输出是:

array(6) {
  [0]=>
  int(50)
  [2]=>
  int(200)
  [3]=>
  int(10)
  [4]=>
  int(100)
  [8]=>
  int(150)
  [10]=>
  int(250)
}

这是一个简单的例子,但是如果你可以管理你的输入就像上面的数组一样,那么你可以使用array_unique只有唯一的值......

编辑1:

要从字符串中删除%符号,只需在需要的位置使用rtrim:

 $string = '100%';
 $trimmed = (int)rtrim($string,'%');//make it int(or float if you like)
 var_dump($trimmed);

编辑2:

与循环数组相关:

    //I suppose this
    //Array ( [0] => 100%) Array ( [0] => 100%) Array ( [0] => 30%)

    //maps to this
    $columnA = array(
                     0=>array('100%'),
                     1=>array('100%'),
                     2=>array('30%')
                     );

    //go through every element
    $temp = array();
    foreach($columnA as $subArray){
        //in this case when we know that there is only one element in the array we can do next:
        $temp[] = $subArray[0];

    }

    $result = array_unique($temp);

    echo "<pre>";
    var_dump($result);
    echo "</pre>";

这将是输出:

 array(2) {
  [0]=>
  string(4) "100%"
  [2]=>
  string(3) "30%"
}