在 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中文网其他相关文章!