$arr[] = array('A','B');
$arr[] = array('C','B');
...
Run Code Online (Sandbox Code Playgroud)
我需要得到所有子数组的合并结果$arr.
对于重复的条目,应该只获取一个.
bis*_*ish 24
如果你真的不想循环,试试这个:
$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));
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 13
好的通过另一个问题我发现以下实际上是可能的(如果你使用PHP版本> = 5.3.0,我试过没有成功,我有错误的版本):
$merged_array = array_reduce($arr, 'array_merge', array());
Run Code Online (Sandbox Code Playgroud)
如果您只想要唯一值,则可以申请array_unique:
$unique_merged_array = array_unique($merged_array);
Run Code Online (Sandbox Code Playgroud)
如果数组中只有平面元素(即没有其他数组),则此方法有效.从文档:
注意:请注意,这
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);
Run Code Online (Sandbox Code Playgroud)
我认为一个人可以假设内部循环(即什么array_walk是做),至少不会比显式循环更慢.
array_unique(array_merge($arr[0], $arr[1]));
Run Code Online (Sandbox Code Playgroud)
或者对于无限制的案例,我认为这应该有效:
$result_arr = array();
foreach ($arr as $sub_arr) $result_arr = array_merge($result_arr, $sub_arr);
$result_arr = array_unique($result_arr);
Run Code Online (Sandbox Code Playgroud)