在 PHP 中,array_diff_assoc() 函数旨在查找两个数组之间的差异,同时对键值进行优先级排序对。然而,当使用此函数根据与另一个 2D 数组的交集来过滤 2D 数组中的行时,它可能并不总是产生预期的结果。
问题的出现是由于由 array_diff_assoc() 执行的严格比较。它在比较过程中比较键值对的字符串表示形式。这意味着即使两个键值对包含相同的值,除非它们的字符串表示形式相同,否则它们也不会被视为相等。
考虑以下示例数据:
$array1 = [
[12 => 'new q sets'],
[11 => 'common set']
];
$array2 = [
[11 => 'common set']
];
当我们尝试使用 array_diff_assoc() 根据 $array2 中的行过滤 $array1 时,我们得到不正确的输出:
$output = array_diff_assoc($array1, $array2);
print_r($output);
// Output: [
// [11 => 'common set']
// ]
此输出显示结果中存在公共行,而预期输出应包含 $array1 中的独占行。
正如前面提到的,问题在于 array_diff_assoc() 执行的严格比较。比较以下两个数组时:
Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )
该函数返回不同的键值对作为结果,因为键值对不是字符串相同的。
为了解决这个问题,我们可以使用稍微不同的方法来检查特定键值在数组:
$filteredRows = array_filter($array1, function($row) use ($array2) {
return !in_array($row, $array2);
});
print_r($filteredRows);
// Output: [
// [12 => 'new q sets']
// ]
此方法使用 in_array() 来检查 $array1 中的每一行是否存在于 $array2 中。如果 $array2 中不存在某行,则该行将包含在过滤结果中。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3