加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 使用array_diff时保留重复项

发布时间:2020-12-13 16:28:02 所属栏目:PHP教程 来源:网络整理
导读:我正在使用array_diff()从array1中的array1中获取值.问题是它会从array1中删除所有出现的内容,正如 PHP文档所记录的那样.我希望它一次只取出一个. $array1 = array();$array1[] = 'a';$array1[] = 'b';$array1[] = 'a';$array2 = array();$array2[] = 'a';
我正在使用array_diff()从array1中的array1中获取值.问题是它会从array1中删除所有出现的内容,正如 PHP文档所记录的那样.我希望它一次只取出一个.
$array1 = array();
$array1[] = 'a';
$array1[] = 'b';
$array1[] = 'a';

$array2 = array();
$array2[] = 'a';

它应该返回一个数组,其中一个’a’和一个’b’,而不是一个只有’b’的数组;

只是为了它的乐趣,一些刚想到的东西.只要您的数组包含字符串,它就会起作用:
$a = array('a','b','a','c');
$b = array('a');

$counts = array_count_values($b);
$a = array_filter($a,function($o) use (&$counts) {
    return empty($counts[$o]) || !$counts[$o]--;
});

它的优点是它只能遍历每个阵列一次.

See it in action.

这个怎么运作:

首先,计算第二阵列中每个元素的频率.这给了我们一个数组,其中键是应该从$a中删除的元素,值是每个元素应该被删除的次数.

然后使用array_filter逐个检查$a的元素,并删除那些应该删除的元素.如果没有等于正在检查的项目的键或者该项目的剩余删除计数已达到零,则过滤器函数使用empty返回true;空的行为完全符合法案.

如果以上都不成立,那么我们想要返回false并将删除计数减1.使用false || !$counts [$o] – 是一个技巧,为了简洁:它递减计数并始终计算为false因为我们知道计数开始时大于零(如果不是,||会短 – 评估空后的电路).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读