2014-03-12 66 views
-1

我有这个下面的数组:删除所有重复的元素与array_unique 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]总和:

$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! 我该如何防止这种情况发生?

感谢

+3

什么行是例外? –

+0

编辑我的帖子!抱歉! – SpencerX

回答

1

快速解答:用途:

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

说明 这个问题是有关,因为您使用的是多维数组,array_unique()使用使用字符串转换离子比较值找到唯一值前:

注意:有两个因素被认为是平等的,当且仅当(string) $elem1 === (string) $elem2。用词表示:当字符串表示是相同的。第一个元素将被使用。

阵列将始终转换为“阵列”,它强制转换为字符串时:

$unique = array_unique($a, SORT_REGULAR); 

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

可以通过在array_unique第二参数指定SORT_REGULAR模式解决这个

或者,如果这不起作用,请通过serializing之前的阵列和unserializing它调用array_unique后找到唯一值:

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

这是你所需要的:

$month= array_unique($month, SORT_REGULAR); 
+0

这就是他所尝试的,并打印了通知。 – Barmar

+0

$ month = array_unique($ month,SORT_REGULAR);这是你需要的 –