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

处理薪资字符串时Neg/NEG分支触发数组键未定义错误

问题解析与修复

问题场景

解析JSON返回的薪资数据时,遇到三种格式:带/annum//hour//day后缀的金额、£NEG、空值。现有PHP代码处理带后缀格式和空值时正常,但处理£NEG时触发Undefined array key 1警告和str_replace()传null的废弃提示。

错误原因

  1. 条件判断逻辑错误:判断薪资是否为可协商的代码写法完全错误:
    if(strpos($jobs['salary'],'Neg'||'NEG' !== false))
    
    这行代码的逻辑运算优先级和写法都存在问题,导致£NEG无法被正确识别,程序错误地进入else分支执行preg_split。
  2. 数组索引越界:£NEG中没有匹配到/hour//annum//day后缀,preg_split返回的数组只有一个元素(索引0),此时访问$chunks[1]就会触发数组键不存在的警告,同时给str_replace()传null触发废弃提示。

修复后的代码

if(!empty($jobs['salary']))
{
    // 修正判断逻辑:不区分大小写检查是否包含Neg
    if(stristr($jobs['salary'], 'Neg') !== false)
    { 
        $salary = 'Negotiable';
        $salarytype = '';  
    } 
    else 
    {
        $chunks = preg_split('/(\/hour|\/annum|\/day)/', $jobs['salary'], -1, PREG_SPLIT_DELIM_CAPTURE);
        $salarya = $chunks[0];
        $salary = str_replace('£','£',$salarya);
        // 先判断数组是否存在索引1,避免报错
        $salarytype = isset($chunks[1]) ? str_replace('/',' per ',$chunks[1]) : '';
    }
} else {            
    $salary = 'Not Specified';
    $salarytype = '';
}

echo $salary . $salarytype . '<br>'; 

关键修复点

  • 用stristr()替代错误的strpos写法,实现不区分大小写的匹配,确保£NEG能被正确识别进入对应分支。
  • 在访问$chunks[1]前增加isset()判断,即使后续出现未匹配到后缀的其他格式,也不会触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:50:18