Laravel读取Excel行数据出现重复输出问题求助
问题分析与解决
你的代码出现重复输出的核心原因有两个:
- 多余的内层for循环:每个
$account已经是Excel中的一行数据,额外添加的for ($i=0; $i<=count($account); $i++)会让当前行内容重复输出「列数+1」次(这里每行有4列,所以重复5次)。 - 未跳过表头行:Excel第一行是表头,默认会被遍历输出,若不需要表头可直接跳过。
修正后的代码
public function bulkTransfer(Request $request) { Log::info("########## Validating File #########"); $request->validate([ "file" => 'required|file|mimes:csv,xlsx' ],[ "file.mimes" => "File should be a csv or excel file" ]); Log::info("########## File Validated #########"); if($request->has("file")){ $allAccounts = Excel::toArray(new \stdClass(), $request->file("file")); foreach ($allAccounts as $accounts){ // 跳过表头行(索引0的元素),从索引1开始遍历数据行 foreach (array_slice($accounts, 1) as $account){ // 直接输出当前行的对应列值,无需额外循环 echo '<p>'. $account[1] . " " . $account[2] . " " . $account[3] . "</p>"; } } } }
关键修改点
- 移除多余的
for循环,避免每行内容重复输出。 - 使用
array_slice($accounts, 1)跳过表头行(若需保留表头,可去掉此处理)。 - 修正验证规则的错误提示键名:原
fileName.mimes改为file.mimes,与验证字段名对应。
修正后输出结果
<p>98393 988 3000</p> <p>87383 8378 2000</p> <p>89382 888 1500</p>
内容的提问来源于stack exchange,提问作者etranz
相关产品推荐
相关产品推荐

