使用array_unique PHP删除所有重复元素

时间:2014-03-12 11:01:15

标签: php

我有以下数组:

Array
(
    [1] => Array
        (
            [0] => 2013-07
            [1] => 4
            [2] => 4
            [3] => 3060
            [4] => 1
        )

    [2] => Array
        (
            [0] => 2013-07
            [1] => 270
            [2] => 757
            [3] => 13812810
            [4] => 4
        )

我想删除所有重复的元素,并将$month[1][4]替换为sum:

  $result = array_reduce($month, function($cur, $x)
{ 
return $cur + $x[4];
 }, 0);
$month = array_unique($month); //<---- Exception
$month[1][4]=$result;

它工作正常,但它显示我异常Notice: Array to string conversion! 我怎样才能防止这种情况发生?

由于

2 个答案:

答案 0 :(得分:1)

快速回答:使用:

$unique = array_unique($a, SORT_REGULAR);
    // OR    
$unique = array_map('unserialize', array_unique(array_map('serialize', $a)));

<强>解释 问题出现是因为您使用的是多维数组,array_unique()在比较值之前使用字符串转换来查找唯一值:

  

注意:当且仅当(string) $elem1 === (string) $elem2时,才认为两个元素相等。用文字表示:当字符串表示相同时。将使用第一个元素。

将数组转换为字符串时,数组将始终转换为“Array”:

var_dump("Array" === (string) array());

您可以通过在SORT_REGULAR的第二个参数中指定array_unique模式来解决此问题:

$unique = array_unique($a, SORT_REGULAR);

或者,如果这不起作用,则在调用array_unique之后serializing之前的数组unserializing找到唯一值:

$unique = array_map('unserialize', array_unique(array_map('serialize', $a)));

答案 1 :(得分:-1)

这就是你需要的:

$month= array_unique($month, SORT_REGULAR);