如何在 PHP 中根据与另一个 2D 数组的交集从 2D 数组中过滤行?

Linda Hamilton
发布: 2024-10-26 06:24:30
原创
596 人浏览过

How to Filter Rows from a 2D Array Based on Intersection with Another 2D Array in PHP?

基于行交集过滤二维数组的行

在 PHP 中,array_diff_assoc() 函数旨在查找两个数组之间的差异,同时对键值进行优先级排序对。然而,当使用此函数根据与另一个 2D 数组的交集来过滤 2D 数组中的行时,它可能并不总是能产生预期的结果。

理解问题

问题的出现是由于由 array_diff_assoc() 执行的严格比较。它在比较过程中比较键值对的字符串表示形式。这意味着即使两个键值对包含相同的值,除非它们的字符串表示形式相同,否则它们也不会被视为相等。

示例数据

考虑以下示例数据:

<code class="php">$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

$array2 = [
    [11 => 'common set']
];</code>
登录后复制

不正确的输出

当我们尝试使用 array_diff_assoc() 根据 $array2 中的行过滤 $array1 时,我们得到不正确的输出:

<code class="php">$output = array_diff_assoc($array1, $array2);

print_r($output);
// Output: [
//     [11 => 'common set']
// ]</code>
登录后复制

This输出显示结果中存在公共行,而预期输出应包含 $array1 中的独占行。

问题原因

如前所述,问题在于由 array_diff_assoc() 执行严格比较。比较以下两个数组时:

<code class="php">Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )</code>
登录后复制

函数返回不同的键值对作为结果,因为键值对不是字符串相同的。

正确方法

为了解决这个问题,我们可以使用稍微不同的方法来检查数组中是否存在特定的键值:

<code class="php">$filteredRows = array_filter($array1, function($row) use ($array2) {
    return !in_array($row, $array2);
});

print_r($filteredRows);
// Output: [
//     [12 => 'new q sets']
// ]</code>
登录后复制

此方法使用 in_array() 来检查每行是否存在$array1 中的内容存在于 $array2 中。如果 $array2 中不存在某行,则会将其包含在过滤结果中。

以上是如何在 PHP 中根据与另一个 2D 数组的交集从 2D 数组中过滤行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!