使用二维数组时,根据特定条件过滤行变得至关重要。本文解决了一个常见的挑战:通过一个数组中的行过滤另一个数组中的行,同时排除常见行。
问题:
尝试使用 array_diff_assoc( )来实现此过滤返回公共行而不是预期的唯一行。
<code class="php">$array1 = [ [12 => 'new q sets'], [11 => 'common set'] ]; $array2 = [ [11 => 'common set'] ];</code>
调用 array_diff_assoc($array1, $array2) 后,输出仍然包含公共行:
<code class="php">[ [11 => 'common set'] ]</code>
解决方案:
问题的根本原因在于 array_diff_assoc() 使用的比较机制。它采用严格比较,这意味着值的字符串表示形式必须精确匹配。在给定的示例中,两个数组中与键 11 关联的值都是“common set”。但是,array_diff_assoc() 将它们视为不同的值,因为它们存储在不同的数组中。
为了获得所需的过滤行为,我们需要使用考虑到数组中存储的实际值的比较。实现此目的的一种方法是在比较之前将所有数组元素转换为通用类型。以下是使用 json_encode() 的示例:
<code class="php">$json_array1 = array_map('json_encode', $array1); $json_array2 = array_map('json_encode', $array2); $filtered_rows = array_diff_assoc($json_array1, $json_array2); $filtered_rows = array_map('json_decode', $filtered_rows);</code>
此方法将每个数组元素转换为 JSON 字符串,并确保现在基于实际值进行比较。过滤操作将正确识别并仅返回唯一行:
<code class="php">[ [12 => 'new q sets'] ]</code>
以上是如何通过另一个数组行过滤 2D 数组行,同时排除公共行?的详细内容。更多信息请关注PHP中文网其他相关文章!