使用 array_diff 时保留重复项

2024-04-23

我使用 array_diff() 从 array1 中取出在 array2 中找到的值。问题是它删除了 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]--;
});

它的优点是它只遍历每个数组一次。

查看实际效果 http://ideone.com/LUvMHS.

怎么运行的:

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

Then array_filter用于检查的元素$a一件一件地把该去掉的去掉。过滤函数使用empty回来true如果没有与正在检查的项目相同的键,或者该项目的剩余移除计数已达到零;empty的行为完全符合要求。

如果以上都不成立,那么我们要返回false并将移除计数减一。使用false || !$counts[$o]--为了简洁起见,这是一个技巧:它减少计数并始终评估为false因为我们知道计数一开始就大于零(如果不是,||评估后会短路empty).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 array_diff 时保留重复项 的相关文章

  • 将数据插入多个表 PHP MySQL

    我有一个用于存储食谱的基本数据结构 它由三个表组成 如下所示 表 1 食谱 recipe id recipe name 表 2 成分 成分 ID 成分名称 表 3 配方 成分 配方 id 成分 id 我在添加新配方时遇到问题 想知道插入的最
  • 将二维数组绑定到数据网格中

    所以我的情况是我想从数据库中的两个字段填充一个二维数组 我在为数组分配数据库字段值时遇到问题 第二个是在数据网格中显示数组 我已经编码了 dgv2 Datasource myArray 但它仍然返回错误消息 这是我的代码 Dim msql
  • Java 从我创建的另一个类访问数组元素

    我正在使用 main 方法在类中创建一个数组 Word attempts new Word 26 Word 类中的字段是 private String attempts Word 类中的构造函数是 public Word int a att
  • PHP:查找所有以“:”开头的单词

    你能帮我用 PHP 函数 正则表达式在给定的文本中找到所有以字符 开头的单词吗 换句话说 所有以 开头并用 空格 分隔的子字符串 Since word应该可能是有效的 我想 word another应该算两个词 那么你就不能说总有一个空格
  • 使用 findAll 时 Yii AR join 不起作用

    我有两张桌子menus and lang menus My Menus模型如下 public function relations NOTE you may need to adjust the relation name and the
  • 下标的使用不明确

    该代码块以前可以工作 但现在不行了 我在纬度和经度变量上收到错误 下标 的使用不明确 这是怎么回事 这是因为 Swift 更新吗 func showPrecincts var urlBoundaries http www oklahomad
  • 2 个使用 jQuery 或 Ajax 的自动完成/建议输入框,第二个框基于多个项目的第一个选择

    我尝试过很多 jquery 和 ajax 自动完成脚本 我发现很难尝试将它们中的任何一个集成到我需要的东西中 让我解释一下我想要实现的目标 我需要 2 个自动完成框 第二个从第一个中提取数据 它们还必须都支持多个条目 查询数据库中的数据 我
  • 像数组一样初始化类对象

    我正在为学校项目创建一个自定义向量类 我希望能够像这样初始化它 vector x 2 3 4 5 C 有什么办法可以做到这一点吗 这是我的班级的标题 class vector private int vsize int valloc dou
  • C 中有数组大小/长度的快捷方式吗?

    有什么方法可以加快 C 中获取数组大小的速度吗 打字sizeof array sizeof int 每次都会变老 有没有 C 库有类似的东西 length或者有什么方法我可以定义sizeof array sizeof int 作为某种较短的
  • 将数组写入文件的最佳方法? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想避免写入数据库并使用常量 数组作为 lang 文件等 i e lang array hello gt hello world 并能够从后台编
  • C 中的数组初始化

    我对以下代码有疑问 int main int array1 1 2 3 4 5 error in c warning in c int array2 1 2 3 4 5 int array3 5 1 2 3 4 5 这段代码在第 3 行给出
  • php中的可变长度数据包

    我正在接收通过 UDP 发送到我的服务器的数据包 我正在使用 socket read 来读取数据 它运行得很好 但是我遇到了一个错误 在我的例子中 socket read 的长度参数并不总是相同的 数据长度的范围可以是 50 150 字节
  • Codeigniter:对未定义函数 mysqli_init() 的致命错误调用

    我刚刚更改了服务器并遇到以下错误 Fatal error Call to undefined function mysqli init in home blacktwitter public html system database dri
  • PHP:调用 __call 而不是 __callStatic

    我正在开发一个自定义 ORM 这里有一个简化的示例来演示该问题 class Foo public static function callStatic name args if name getBar return Bar return N
  • 使用 PHP simpleXML 查找一个我知道名称但不知道其所在位置的节点

    如果我知道要查找的节点的名称 但我可能不一定知道该节点的路径 我需要在 PHP 中查询 XML 字符串 我想我可以使用 xpath 做到这一点 但我无法弄清楚如何设置相对路径来查看文档中的任何位置 有人可以指出我正确的方向吗 我目前正在尝试
  • 在 Ruby 中覆盖 BigDecimal to_s 默认值

    当我从数据库表中检索数据时 会填充一个数组 某些字段被定义为小数和货币字段 并且在数组中它们表示为 BigDecimal 我使用这些数组值来填充 CSV 文件 但问题是所有 BigDecimal 值默认都以科学格式表示 这是 BigDeci
  • 有效地减去不同形状的 numpy 数组

    使用 numpy 出色的广播规则 您可以减去形状 3 数组v来自形状 5 3 数组X with X v 结果是一个形状 5 3 数组 其中每一行i是有区别的X i v 有没有办法减去形状 n 3 数组w from X使得每一行w从整个数组中
  • 使用PHP检测IE浏览器版本

    我正在使用 SERVER HTTP USER AGENT 来检测用户的浏览器 当我在 IE8 上的本地主机上运行 var dump 时 它返回 兼容的 微星8 0 但是当我将其上传到我的主机 godaddy 时 我得到 兼容的 MSIE 7
  • 在 C 中初始化结构体的静态数组

    我正在用 C 实现一个纸牌游戏 纸牌有很多种类型 每种纸牌都有大量信息 包括一些需要单独编写与其关联的脚本的操作 给定这样的结构 并且我不确定我的语法是否适合函数指针 struct CARD int value int cost This
  • C++ 中的 Ofstream 数组

    我想要在我的项目中使用 41 个输出文件来在其上写入文本 首先创建一个字符串数组list为了命名这些输出文件 然后我尝试定义一个 ofstream 对象数组并使用list命名它们 但我收到此错误 outfile cannot be used

随机推荐