如何使用 PHP 的 `array_diff_assoc()` 函数过滤二维数组中的重叠行?

Linda Hamilton
发布: 2024-10-25 11:17:30
原创
112 人浏览过

How to Filter Overlapping Rows in 2D Arrays Using PHP's `array_diff_assoc()` Function?

基于重叠行过滤二维数组的行

在 PHP 中,array_diff_assoc() 函数通常用于确定之间的差异两个数组。但是,在涉及 2D 数组的某些场景中,用户在尝试过滤掉重叠行时可能会遇到意外结果。

用户报告使用 array_diff_assoc() 比较两个 2D 数组,但注意到结果包含两个数组的公共行数组而不仅仅是唯一的行。为了理解这个问题,让我们检查用户提供的示例数据:

$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

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

调用 array_diff_assoc($array1, $array2) 后,用户期望收到仅包含 $array1 中唯一行的输出(即,'[12 => '新 q 组']')。然而,实际输出是:

[
    [11 => 'common set']
]
登录后复制

问题在于 PHP 比较 array_diff_assoc() 中的值的方式。仅当两个值作为字符串严格相等时才被视为相等。在提供的 2D 数组的情况下,两个数组中与键“11”关联的值是字符串“common set”。但键值对本身与数组并不相同。

因此,当 array_diff_assoc() 比较两个数组时,发现键值对 [11 =>; 'common set'] 对于两个数组来说是相同的,因此将其排除在差异之外。这种行为源于 PHP 中的所有数组在内部都表示为字符串“Array”这一事实。

要解决此问题,可以使用一种不同的方法来过滤掉 2D 数组之间的重叠行。一种常见的方法涉及为每一行创建唯一标识符,并使用该标识符作为关联数组的键。下面是一个示例:

$uniqueIdentifiers = [];
$filteredRows = [];

foreach ($array1 as $row) {
    $uniqueIdentifier = implode('|', array_values($row));
    $uniqueIdentifiers[$uniqueIdentifier] = true;
}

foreach ($array2 as $row) {
    $uniqueIdentifier = implode('|', array_values($row));
    if (isset($uniqueIdentifiers[$uniqueIdentifier])) {
        unset($uniqueIdentifiers[$uniqueIdentifier]);
    }
}

foreach ($uniqueIdentifiers as $uniqueIdentifier => $isPresent) {
    $filteredRows[] = array_values(array_flip(explode('|', $uniqueIdentifier)));
}
登录后复制

此方法通过连接数组值并将其用作键来为每行创建一个唯一标识符。然后,它迭代第二个数组并从列表中取消设置任何匹配的唯一标识符。最后,它迭代剩余的唯一标识符,翻转键和值以重建行,并将它们添加到 $filteredRows 数组中。

通过利用此方法,您可以有效地过滤掉 2D 数组之间的重叠行同时确保唯一的行被正确识别并在结果中返回。

以上是如何使用 PHP 的 `array_diff_assoc()` 函数过滤二维数组中的重叠行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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