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

PHP中array_search仅返回单个结果,如何获取多个匹配值?

如何获取数组中所有值为10的键名?

array_search()函数的设计逻辑就是仅返回第一个匹配目标值的键,所以你的代码只会拿到第一个得10分的Misca,这是该函数的正常特性,并非bug。

你后续用foreach遍历这个结果时,本质是在遍历字符串"Misca"的每个字符——PHP会自动把字符串当作字符数组处理,所以循环会执行5次,每次输出一个字符,看起来像是重复输出Misca,这显然不是你想要的效果。


正确获取所有得10分人名的方法

方法一:手动遍历数组筛选

通过foreach遍历整个数组,判断每个元素的值是否为10,收集对应的键名:

$notas2 = [
    "Ana" => 4,
    "Misca" => 10,
    "Chatuba" => 6,
    "Jurandir" => 7,
    "Musca" => 10,
    "Mickey Mouse" => 10,
];

$tirou10 = [];
foreach ($notas2 as $nome => $nota) {
    if ($nota === 10) { // 用严格匹配避免类型混淆
        $tirou10[] = $nome;
    }
}

// 输出所有符合条件的人名
foreach ($tirou10 as $nome) {
    echo $nome . PHP_EOL;
}

方法二:使用array_keys()快速筛选

array_keys()支持第二个参数指定目标值,第三个参数开启严格匹配,可以直接返回所有值等于10的键名:

$notas2 = [
    "Ana" => 4,
    "Misca" => 10,
    "Chatuba" => 6,
    "Jurandir" => 7,
    "Musca" => 10,
    "Mickey Mouse" => 10,
];

// 第三个参数true开启严格匹配(值和类型都要一致)
$tirou10 = array_keys($notas2, 10, true);

// 输出结果
foreach ($tirou10 as $nome) {
    echo $nome . PHP_EOL;
}

补充说明

  • 建议使用严格匹配(===或array_keys的第三个参数),避免比如值为"10"(字符串类型)被误判为匹配的情况。
  • 如果需要处理更大的数组,array_keys()的性能会比手动遍历略好,不过日常开发中两者差异可以忽略。

内容的提问来源于stack exchange,提问作者Blaugusto Rodrigues

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:27:14