为何在结合$_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
相关产品推荐
相关产品推荐

