PHP如何检查关联数组的键是否存在于另一个数组中?
关联数组键存在性检查的问题解决
错误原因
你当前代码的核心问题是误用了in_array()函数:
in_array()的作用是判断某个值是否存在于目标数组的值集合中,但你的需求是判断第一个数组的键是否作为键存在于第二个数组里,这个函数完全不适用当前场景。
修正后的代码实现
方法1:修复原有while循环
将in_array替换为专门检查键存在性的array_key_exists()函数:
<?php $team_member = ["Person_1" => 0, "Person_2" => 0, "Person_3" => 0, "Person_4" => 0]; $today_active_member = ["Person_1" => 0, "Person_3" => 0, "Person_4" => 0]; $i = count($team_member); while($i--){ $currentKey = key($team_member); if(array_key_exists($currentKey, $today_active_member)) { echo $currentKey . " is present today.<br/>"; } else { echo $currentKey . " isn't present today.<br/>"; } next($team_member); }
方法2:使用foreach遍历(推荐)
foreach可以直接遍历关联数组的键值对,代码更简洁易读:
<?php $team_member = ["Person_1" => 0, "Person_2" => 0, "Person_3" => 0, "Person_4" => 0]; $today_active_member = ["Person_1" => 0, "Person_3" => 0, "Person_4" => 0]; foreach($team_member as $name => $_) { if(array_key_exists($name, $today_active_member)) { echo "$name is present today.<br/>"; } else { echo "$name isn't present today.<br/>"; } }
方法3:用isset提升性能
如果第二个数组中不存在键对应值为null的情况,isset()的性能比array_key_exists更优:
foreach($team_member as $name => $_) { if(isset($today_active_member[$name])) { echo "$name is present today.<br/>"; } else { echo "$name isn't present today.<br/>"; } }
批量提取存在的键
如果只需要获取第一个数组中存在于第二个数组的所有键,不需要逐个输出,可以用array_intersect_key一步完成:
$presentMembers = array_intersect_key($team_member, $today_active_member); // 结果为 ["Person_1" => 0, "Person_3" => 0, "Person_4" => 0] print_r($presentMembers);
内容的提问来源于stack exchange,提问作者Hasib Hosen
相关产品推荐
相关产品推荐

