首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php多维数组去重

php多维数组去重
EN

Stack Overflow用户
提问于 2009-12-08 01:49:30
回答 7查看 34K关注 0票数 20

不确定这个问题是否是需要删除的副本,但我在其他地方找不到答案,所以我会试着问一下。

我得到了一个二维数组,如下所示:

代码语言:javascript
运行
复制
Array
(
[0] => Array
    (
        [0] => dave
        [1] => jones
        [2] => c@b.c
    )

[1] => Array
    (
        [0] => john
        [1] => jones
        [2] => a@b.c

    )

[2] => Array
    (
        [0] => bruce
        [1] => finkle
        [2] => c@b.c
    )
)

我想删除那些有重复电子邮件的邮件。所以在上面的例子中,我只想删除或。我不担心检查名称或类似的东西,我只需要根据单个值对子阵列进行重复数据消除。

目前我有类似这样的东西

代码语言:javascript
运行
复制
  if(is_array($array) && count($array)>0){
  foreach ($array as $subarray) {
    $duplicateEmail[$subarray[2]] = isset($duplicateEmail[$subarray[2]]);
    unset($duplicateEmail[$subarray[2]]);
   }
  }

但这是不对的。感谢您的帮助。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-12-08 02:23:46

一种利用数组索引唯一性的快速解决方案:

代码语言:javascript
运行
复制
$newArr = array();
foreach ($array as $val) {
    $newArr[$val[2]] = $val;    
}
$array = array_values($newArr);

注意1:从上面可以看到,使用电子邮件地址的最后一个匹配项而不是第一个匹配项。这可以通过将第二行替换为

代码语言:javascript
运行
复制
foreach (array_reverse($array) as $val) {

注意2:结果数组中的索引有些混乱。但我想这无关紧要。

票数 28
EN

Stack Overflow用户

发布于 2013-02-22 12:06:21

简单得多的解决方案。

代码语言:javascript
运行
复制
$unique = array_map('unserialize', array_unique(array_map('serialize', $array)));

echo "<pre>";
print_r($unique);
票数 15
EN

Stack Overflow用户

发布于 2009-12-08 01:52:31

array_unique()的用户评论对此有几个解决方案。例如

function multi\_unique($array) { foreach ($array as $k=>$na) $new[$k] = serialize($na); $uniq = array\_unique($new); foreach($uniq as $k=>$ser) $new1[$k] = unserialize($ser); return ($new1); }

来自。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1861682

复制
相关文章

相似问题

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