$arr[] = array('A','B');
$arr[] = array('C','B');
...
我需要获取
$arr
的所有子数组的合并结果。对于重复的条目,应只获取一个。$arr[] = array('A','B');
$arr[] = array('C','B');
...
$arr
的所有子数组的合并结果。对于重复的条目,应只获取一个。如果你真的不想使用循环,请尝试这个:
$arr[] = array('A','B');
$arr[] = array('C','B');
$arr[] = array('C','D');
$arr[] = array('F','A');
$merged = array_unique(call_user_func_array('array_merge', $arr));
通过另一个问题,我发现以下内容实际上是可能的(我尝试过但没有成功,我使用了错误的版本),只要您使用的 PHP 版本>= 5.3.0 :
$merged_array = array_reduce($arr, 'array_merge', array());
如果您只想要唯一的值,可以使用 array_unique
函数:$unique_merged_array = array_unique($merged_array);
如果您的数组中只有平面元素(即没有其他数组),则此方法可行。根据文档:
Note: 请注意,
array_unique()
不适用于多维数组。
如果您的数组中有包含其他数组,则需要手动检查,例如使用 array_walk
:
$unique_values = array();
function unique_value($value, &$target_array) {
if(!in_array($value, $target_array, true))
$target_array[] = $value;
}
array_walk($merged_values, 'unique_value', $unique_values);
我认为可以假设内部循环(即array_walk
在执行的内容)至少不会比显式循环更慢。
array_unique(array_merge($arr[0], $arr[1]));
$result_arr = array();
foreach ($arr as $sub_arr) $result_arr = array_merge($result_arr, $sub_arr);
$result_arr = array_unique($result_arr);
$res = array_reduce($res, function(&$res, $v) {
return array_merge($res, (array) $v);
}, array());
$merged_array = array_reduce($serp_res, 'array_merge', array()); 加上引号的'array_merge'对我很有用。
对于带有splat运算符的PHP 5.6:
array_unique(array_merge(...$arr));
array_unique
,因为如果发现重复的键,array_merge
会覆盖它们。请问有人可以回复我吗? - Ankit