PHP中使用strpos对比字符串与多维数组元素未生效问题求助
错误原因
strpos()是字符串子串匹配函数,仅支持传入字符串类型的参数,你直接将多维数组$listofplaces作为第二个参数传入,参数类型不匹配,函数无法正常执行,自然不会返回正确结果。- 你的需求是完全匹配地点名称,
strpos()做子串匹配本身逻辑就不符合要求,例如$value = "aris"时会误判为匹配"Paris"。
修复方案
根据你给出的数组结构,所有地点名称存储在$listofplaces[0]["values"]下每个子数组的name字段中,你可以先提取所有地点名再做完全匹配判断。
版本兼容方案(所有PHP版本通用)
直接遍历数组做全等判断:
$isFound = false; foreach ($listofplaces[0]['values'] as $item) { // 三个等号做严格全等判断,避免隐式类型转换导致的误判 if ($item['name'] === $value) { $isFound = true; break; } } echo $isFound ? 'found' : 'not found';
简洁方案(PHP 5.5+ 支持)
用array_column()提取所有地点名到一维数组,再用in_array()做匹配:
// 提取所有地点名称到一维数组 $allPlaces = array_column($listofplaces[0]['values'], 'name'); // 第三个参数传true开启严格类型校验 if (in_array($value, $allPlaces, true)) { echo 'found'; } else { echo 'not found'; }
注意事项
- 如果不需要区分大小写匹配,可以把判断条件替换为
strcasecmp($item['name'], $value) === 0 - 实际运行代码前请将所有中文全角引号替换为英文半角引号,避免触发语法错误。
内容的提问来源于stack exchange,提问作者lochness
相关产品推荐
相关产品推荐

