如何对比同序数组键值对,统计完全匹配的数量?
统计两个数组中键值对完全匹配的数量
嘿,我懂你的痛点!array_intersect和array_diff确实只会判断值是否存在,完全不管键的对应关系,所以没法直接用来统计键和值都精准匹配的数量。不过有两种简单的方法可以解决这个问题:
方法一:手动遍历统计(直观易懂)
直接遍历其中一个数组的键,逐个对比另一个数组对应位置的值,同时还要确保另一个数组存在这个键(避免索引越界):
$array1 = ['AAAA', 'DDDD', 'CCCC', 'BBBB']; $array2 = ['AAAA', 'BBBB', 'CCCC', 'DDDD']; $matchCount = 0; foreach ($array1 as $key => $value) { // 先检查数组2有没有这个键,再对比值是否完全相等 if (isset($array2[$key]) && $array2[$key] === $value) { $matchCount++; } } echo $matchCount; // 输出:2
方法二:用PHP内置函数简化操作(更简洁)
其实PHP专门提供了一个同时考虑键和值的交集函数——array_intersect_assoc,它会返回两个数组中键和值都完全匹配的所有元素。我们只需要统计这个结果数组的长度就行:
$array1 = ['AAAA', 'DDDD', 'CCCC', 'BBBB']; $array2 = ['AAAA', 'BBBB', 'CCCC', 'DDDD']; // 获取键值对都匹配的元素数组 $matchedItems = array_intersect_assoc($array1, $array2); // 统计数量 $matchCount = count($matchedItems); echo $matchCount; // 同样输出:2
小提示
array_intersect_assoc会自动忽略那些只在其中一个数组存在的键,和手动遍历里加isset的逻辑一致,不用担心数组长度不同导致的问题。如果你的数组是关联数组(不是数字索引),这个方法同样适用哦!
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

