Laravel集合each方法外部变量访问报错:Undefined variable: headers
解决Laravel集合each方法中变量未定义的问题
你遇到的Undefined variable: headers错误,核心原因是PHP闭包的作用域限制——内部闭包无法自动访问外部闭包中定义的变量,必须显式通过use关键字将变量引入内部闭包的作用域。
咱们来看你的代码:在Excel::load的外层闭包里定义了$headers,但在嵌套的$reader->each闭包里直接访问它,这个内部闭包默认是看不到外层的$headers的。
修改后的代码
public function bulkCoding(Request $request) { Excel::load($request->file, function($reader) { $headers = $reader->get()->first()->keys(); // 遍历所有工作表时,通过use引入$headers变量 $reader->each(function($sheet) use ($headers) { $headers->each(function ($title) { dd($title); }); }); }); }
关键说明
- 在
$reader->each的闭包参数后面加上use ($headers),就把外层闭包的$headers变量传递到了内部闭包的作用域里,这样就能正常访问了。 - 如果后续需要在内部闭包里修改
$headers的值,要加上引用符号&,写成use (&$headers),不过你这里只是读取表头,所以不需要引用。
另外补充一点:如果你的需求是获取每个工作表自己的表头,而不是第一个工作表的表头,那应该把$headers = $sheet->first()->keys()放到$reader->each的闭包里,这样每个工作表都能拿到自己的专属表头,这算是个额外的优化建议~
内容的提问来源于stack exchange,提问作者CairoCoder
相关产品推荐
相关产品推荐

