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

使用explode()拆分字符串时出现数组键1未找到异常的问题求助

问题分析与解决方案

核心原因

你调试时看到的是正常元素的输出,但**$hours数组中存在部分元素的time字段不包含-分隔符**(比如空字符串、格式错误的时间值)。当explode('-', $xxx, 2)处理这类字符串时,只会返回1个元素的数组,解构赋值[$first, $last]就会因找不到索引1抛出异常。

解决方案

1. 兜底解构赋值(快速修复)

给解构结果加上默认值,避免数组索引不存在的问题:

[$first, $last] = explode('-', $hours[$key]['time'], 2) + [null, null];
// 后续可根据需求处理null情况,比如设置默认值
$beginTime = $first ? trim($first) : '';
$endTime = $last ? trim($last) : '';

2. 前置检查(更严谨)

先判断字符串是否包含分隔符,再处理异常场景:

$time = $hours[$key]['time'];
$beginTime = '';
$endTime = '';

if (str_contains($time, '-')) {
    [$first, $last] = explode('-', $time, 2);
    $beginTime = trim($first);
    $endTime = trim($last);
} else {
    // 可选:跳过异常元素,或者设置默认值
    // continue;
}

$days[] = [
    'id' => $hours[$key]['id'],
    'day' => $key,
    'begin_time' => $beginTime,
    'end_time' => $endTime,
    'free' => false,
];

3. 优化拆分规则(适配带空格的分隔符)

你的示例中分隔符是-(带空格),用explode('-')会导致拆分后元素带空格,虽然trim能处理,但可以用正则拆分更精准:

[$first, $last] = preg_split('/\s*-\s*/', $hours[$key]['time'], 2) + [null, null];

排查建议

先遍历输出所有$hours[$key]['time']的值,确认是否存在格式异常的条目,这是从根源解决问题的关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:20:19