【问题标题】:Get first row of csv file in laravel在laravel中获取第一行csv文件
【发布时间】:2016-11-01 08:12:18
【问题描述】:

我想问如何在 laravel 中获取第一行(列名)? 现在我从存储中加载我的文件。 我试过 $contents[0];但它没有用。

public function csvread(Request $request) {
$contents = Storage::disk('public')->get('asdf.csv');
}

谢谢!

【问题讨论】:

  • fgetcsv 有问题吗?
  • 您确定您拨打的电话是否成功?尝试转储 $contents 的值以确保您获得预期值。我对 Laravel 不熟悉,但我推测它要么返回某种文件对象,要么返回 false,如果不成功......或者,你是否收到错误消息?如果是这样,您应该将其添加到问题中以供参考。

标签: php laravel-5.2


【解决方案1】:

我不了解 Laravel,因此无法具体评论 Storage 的功能。但是,我查看了documentation,其中声明如下:

get 方法可用于检索给定文件的内容。该方法将返回文件的原始字符串内容

因此,假设您的调用成功找到并读取了文件,$contents 是一个字符串 - 取消引用 $contents[0] 只会返回字符串的第一个字符。显然不是你想要的!

我同意问题 cmets 中的 @JonStirling,并尝试使用 fgetcsv() 直接解析 csv。或者,如果您想更加基于对象,您可以使用SplFileObject(),它可以读取和迭代 CSV 文件,并给出适当的标志。

这是来自 PHP 文档的示例 #2 的副本:

$file = new SplFileObject("animals.csv");
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {
    list($animal, $class, $legs) = $row;
    printf("A %s is a %s with %d legs\n", $animal, $class, $legs);
}

当然,您也需要将原始文件路径传递给 SplFileObject() - this answer should be useful

最后,如果您的 CSV 有空行,您可能需要向 SplFileObject 添加额外的标志 - 即 SplFileObject::SKIP_EMPTYSplFileObject::READ_AHEAD

您也可以选择使用预先存在的软件包;例如:http://csv.thephpleague.com/

希望这会有所帮助! :)

【讨论】:

  • 非常感谢您的宝贵时间。我在获取我的文件的 url 时遇到了一些问题,即使你有关于它的问题的链接。但最后我已经解决了。您的回答非常详尽。
  • 嘿,我还有一个问题,是否可以检查其中一列是否命名为“姓名”或“姓氏”?
  • 嗨。刚看到这个。这取决于您的数据,但假设您的 csv 的第一行包含“标题”行,您可以使用in_array() 来检查第一行是否包含“姓氏”?
猜你喜欢
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 2013-08-20
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 2014-01-26
相关资源
最近更新 更多