PHP7下三维数组初始化避免undefined offset报错的方案咨询
PHP7数组未定义索引报错修复方案
PHP7+并未修改「向未定义数组索引赋值时自动创建索引」的逻辑,你遇到的undefined offset报错本质是读取未初始化的数组索引时,原本PHP5下的Notice级提示被升级为Warning级导致的。
针对你需要的三维数组初始化需求,不需要写嵌套循环,直接用PHP内置的array_fill+array_map组合即可一行完成初始化:
// 默认值填0,需要null的话把最后一个参数替换为null即可 $childs_classroom = array_map(fn($c) => array_map(fn($w) => array_fill(0, 5, 0), range(0, 260)), range(0, 4));
代码逻辑说明
- 内层
array_fill(0, 5, 0):生成day_of_week维度数组,索引范围0-4,所有元素默认值为0 - 中层
range(0, 260)生成0到260的整数索引列表,通过array_map为每个week索引绑定一个内层的day数组 - 外层
range(0, 4)生成0到4的班级索引列表,通过array_map为每个classroom索引绑定一个中层的week数组
如果你的服务器PHP版本低于7.4不支持箭头函数,可改用兼容版本的写法:
$childs_classroom = array_map( function($c) { return array_map( function($w) { return array_fill(0, 5, 0); }, range(0, 260) ); }, range(0, 4) );
临时兜底方案
如果暂时没有时间修改所有代码,可在脚本入口第一行添加错误控制代码,屏蔽对应级别的报错:
// 仅屏蔽Warning和Notice级报错,不影响其他致命错误提示 error_reporting(error_reporting() & ~E_WARNING & ~E_NOTICE);
内容的提问来源于stack exchange,提问作者Jim Linder
相关产品推荐
相关产品推荐

