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

PHP中使用strpos对比字符串与多维数组元素未生效问题求助

错误原因
  1. strpos() 是字符串子串匹配函数,仅支持传入字符串类型的参数,你直接将多维数组$listofplaces作为第二个参数传入,参数类型不匹配,函数无法正常执行,自然不会返回正确结果。
  2. 你的需求是完全匹配地点名称,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:06:05