You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:15:35