我有以下数组:
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
!
我怎样才能防止这种情况发生?
由于
答案 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);