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

为何在结合$_POST的PHP代码中array_search函数无法正常工作?

问题分析与解决方案

你遇到的问题核心是搞反了数组的键值关系和array_search()的作用逻辑!

为什么之前正常现在失效?

你的数组$arr是「城市作为键,国家作为值」的结构:

$arr = array(
    'Tokyo' => 'Japan', // 键=城市,值=国家
    'Mexico City' => 'Mexico',
    // ...其他项
);

而array_search($needle, $array)的作用是:在数组的值中查找目标内容,找到后返回对应的键。

之前不用$_POST测试时,你大概率是用国家名称作为查找目标(比如array_search('Japan', $arr)),这时候能正确返回对应城市Tokyo;但现在你传入的是城市名称(比如Tokyo),去数组的值(全是国家名称)里查找,自然找不到匹配项,函数返回false,导致$country的值不符合预期。

修正方案

因为你选中的城市本身就是数组的键,所以根本不需要用array_search(),直接通过键访问数组值就能拿到对应的国家:

<?php 
$arr = array( 
    'Tokyo' => 'Japan', 
    'Mexico City' => 'Mexico', 
    'New York City' => 'USA', 
    'Mumbai' => 'India', 
    'Seoul' => 'Korea', 
    'Shanghai' => 'China', 
    'Lagos' => 'Nigeria', 
    'Buenos Aires' => 'Argentina', 
    'Cairo' => 'Egypt', 
    'London' => 'England'
); 
?> 
<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
    <title>Document</title> 
</head> 
<body> 
    <form method="post" action="exercise.php"> 
        <select name="city"> 
            <?php foreach ($arr as $a => $b) { echo "<option>$a</option>"; } ?> 
        </select> 
        <input type="submit" value="get a city"> 
    </form> 
    <?php 
    if ($_POST) { 
        $city = $_POST['city'];
        // 直接通过城市键获取对应国家
        $country = $arr[$city]; 
        echo "<p>$city is in $country.</p>" ; 
    } 
    ?> 
</body> 
</html>

额外提示(非必要)

如果出于特殊需求一定要用array_search(),你需要先反转数组的键值(让国家作为键,城市作为值),但这属于多此一举的操作:

$reversed_arr = array_flip($arr);
$country = array_search($city, $reversed_arr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:01:03