首页  >  文章  >  后端开发  >  如何使用 array_uintersect() 通过匹配值来过滤数组行?

如何使用 array_uintersect() 通过匹配值来过滤数组行?

Linda Hamilton
Linda Hamilton原创
2024-10-23 16:06:02144浏览

How to Filter Array Rows by Matching Values Using array_uintersect()?

在平面数组中保留与值匹配的数组行

背景:

您有一个数组 $arr1 具有多个列,另一个数组 $arr2 包含值列表。目标是过滤 $arr1 并仅保留 id 列与 $arr2 中的任何值匹配的行。

解决方案:

使用 array_uintersect() :

最有效的解决方案是利用 array_uintersect() 函数,该函数使用用户定义的回调来比较两个数组中的元素。在这种情况下,回调会检查 id 值是否匹配。

var_export(
    array_uintersect(
        $arr1,
        $arr2,
        fn($a, $b) =>
            ($a['id'] ?? $a)
            <=>
            ($b['id'] ?? $b)
    )
);

说明:

  • array_uintersect() 函数接受两个数组和一个回调作为参数。
  • 为两个数组中的每个元素调用回调函数,如果元素相等则返回 0,如果第一个元素大于则返回 1,如果第二个元素大于则返回 -1 .
  • 如果元素没有 id 列,则使用其原始值进行比较。
  • 结果是一个数组,仅包含 $arr1 中 id 列与某个值匹配的行$arr2.

array_uintersect()的好处:

  • 它是原生PHP函数,保证效率和兼容性。
  • 它在求值的同时进行排序,从而优化了性能。
  • 与迭代调用 in_array() 相比,它提供了简洁易读的解决方案。

以上是如何使用 array_uintersect() 通过匹配值来过滤数组行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn