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

使用array_key_exists判断后仍出现Undefined offset:1报错的原因?

为什么用array_key_exists检查后还会出现Undefined offset: 1?

嘿,这个问题其实是运算符优先级在搞鬼!你写的代码里,字符串连接符.的优先级比三元运算符?:要高,导致代码的执行顺序完全不是你预期的那样。

让我们拆解一下你原来的代码:

<td width="91">'.(array_key_exists ( 1 , $famstand )) ? $famstand[1] : "" .'</td>

实际执行的时候,PHP会先处理左边的字符串连接:'<td width="91">' . array_key_exists(1, $famstand),把这个结果作为三元判断的条件,然后再去执行$famstand[1]或者"" . '</td>'。这就意味着,不管array_key_exists(1, $famstand)返回true还是false,PHP都会尝试访问$famstand[1]——当键1不存在时,自然就抛出了Undefined offset: 1的错误。

解决方法很简单:给整个三元表达式加个括号

把代码改成这样,确保三元判断先执行,再把结果和前后的字符串连接:

<td width="91">'.(array_key_exists(1, $famstand) ? $famstand[1] : "").'</td>

这样PHP会先检查键1是否存在,存在就返回$famstand[1],不存在就返回空字符串,再把这个结果和前后的<td>标签连接,就不会再触发偏移量错误了。

另外,如果你用的是PHP 7+,也可以考虑用空合并运算符??来简化代码,它本身就会检查键是否存在,写法更简洁:

<td width="91">'.($famstand[1] ?? "").'</td>

这个运算符的作用就是:如果$famstand[1]存在且不为null,就返回它的值,否则返回空字符串,完全避免了手动调用array_key_exists的麻烦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:57:57