首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何合并子数组值和删除重复项?

如何合并子数组值和删除重复项?
EN

Stack Overflow用户
提问于 2010-01-26 23:52:23
回答 7查看 14.1K关注 0票数 9
代码语言:javascript
复制
$arr[] = array('A','B');
$arr[] = array('C','B');
...

我需要得到$arr的所有子数组的合并结果。

对于重复的条目,应该只获取一个。

EN

回答 7

Stack Overflow用户

发布于 2010-01-27 03:49:09

如果你真的不想循环,试试这个:

代码语言:javascript
复制
$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));
票数 25
EN

Stack Overflow用户

发布于 2010-01-27 00:45:51

好的,通过另一个问题,我发现如果您使用PHP >= 5.3.0,实际上是可能的(我自己尝试了一下,但没有成功,我的版本是错误的)

代码语言:javascript
复制
$merged_array = array_reduce($arr, 'array_merge', array());

如果您只需要唯一值,则可以应用array_unique

代码语言:javascript
复制
$unique_merged_array = array_unique($merged_array);

如果数组中只有平面元素(即没有其他数组),则此方法有效。从文档中:

注意:请注意,array_unique()不适用于多维数组。

如果您的阵列中有阵列,则必须手动检查,例如使用array_walk

代码语言:javascript
复制
$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正在做的事情)至少是而不是比显式循环慢。

票数 15
EN

Stack Overflow用户

发布于 2010-01-26 23:54:59

代码语言:javascript
复制
array_unique(array_merge($arr[0], $arr[1]));

或者对于无限的情况,我认为这应该是可行的:

代码语言:javascript
复制
$result_arr = array();
foreach ($arr as $sub_arr) $result_arr = array_merge($result_arr, $sub_arr);
$result_arr = array_unique($result_arr);
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2140503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档