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

PHP判断数组非空后仍报Undefined array key 0错误原因求解

问题根源

你触发报错的核心原因是:非空的数组不一定存在下标为0的键。
你的代码逻辑中,循环计数器$i不管本轮是否匹配到DataCode都会全局自增,当首次匹配到DataCode的轮次不是第一轮时,$this->data的下标会从大于0的数值开始。举个实际触发错误的场景:

  • 第一轮循环$i=0,未匹配到对应DataCode,不会给$this->data[0]赋值
  • 第二轮循环$i=1,匹配到对应DataCode,给$this->data[1]赋值
  • 循环结束后$this->data内容为[1 => ['data_id' => xxx, 'data_name' => xxx]]
    此时!empty($this->data)判断结果为真,但访问$this->data[0]就会抛出数组键不存在的错误。

修复方案

可任选以下一种方案适配你的业务逻辑:

  • 方案1:调整下标赋值逻辑,保证数组下标从0开始连续
    直接在匹配到DataCode时用[]自动追加元素,不需要单独维护计数器:
$this->data = [];
foreach($core_data as $core) {
    $dataCode = DataCode::where('code', $core->code)->first();
    if ($dataCode instanceof DataCode) {
        $this->data[] = [
            'data_id' => $dataCode->id,
            'data_name' => $dataCode->name
        ];
    }
}
  • 方案2:不硬编码下标0,直接读取数组第一个元素
if (!empty($this->data)) {
    $data = Data::create([
        'first_name' => reset($this->data)['data_name']
    ]);
}
  • 方案3:直接判断下标0是否存在再执行后续操作
if (isset($this->data[0])) {
    $data = Data::create([
        'first_name' => $this->data[0]['data_name']
    ]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:15:03