为了账号安全,请及时绑定邮箱和手机立即绑定

我们如何通过定义 where 条件从 csv 文件中获取数据?

我们如何通过定义 where 条件从 csv 文件中获取数据?

PHP
慕后森 2021-06-16 17:01:58
我想通过在 laravel 中定义 where 条件来从 CSV 文件中获取数据我已经有了一个函数,这将正确获取数组 $customerArr 上的数据但我想使用 where 条件所有数据都来自 city_master.csv文件标题被定义为城市代码。意味着我想要匹配来自 CSV 文件而不是来自数据库的数据。代码在这里——$file = public_path('file/city_master.csv');$customerArr = $this->csvToArray($file);for ($i = 0; $i < count($customerArr); $i++){//dd($customerArr );$userreg = $customerArr->where('City_Code', 'like', '%'.$query.'%')->get();}return 'not in array';
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

您不能where在 PHP 数组上使用,您是否从您的csvToArray方法中返回了一个集合?如果这样做,则不应调用get()集合,因为这是查询构建器的代码。


所以我假设你从你的方法中只返回一个数组,然后你可以使用辅助函数来创建一个集合,所以你的代码可以变成以下内容:


$file = public_path('file/city_master.csv');

$customerArr = $this->csvToArray($file);


$result = collect($customerArr)->filter(function ($item) use ($query) {

    // replace stristr with your choice of matching function

    return false !== stristr($item->City_Code, $query);

});


if($result->count()) {

    // success

}


return 'not in array';

我使用stristr()函数来模拟 LIKE 运算符。


查看完整回答
反对 回复 2021-06-19
?
慕森卡

TA贡献1806条经验 获得超8个赞

在循环本身中还有一个计数函数;每次循环循环时都会对 count($customerArr) 进行不必要的评估。将计数存储在一个变量中并改用它,这将改善您的执行时间。


$count = count($customerArr);

for ($i = 0; $i < $count; $i++)

{

//dd($customerArr );

$userreg = $customerArr->where('City_Code', 'like', '%'.$query.'%')->get();

}


查看完整回答
反对 回复 2021-06-19
  • 2 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信