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
相关产品推荐
相关产品推荐

