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

我想通过在 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';


慕后森
浏览 158回答 2
2回答

HUH函数

您不能where在 PHP 数组上使用,您是否从您的csvToArray方法中返回了一个集合?如果这样做,则不应调用get()集合,因为这是查询构建器的代码。所以我假设你从你的方法中只返回一个数组,然后你可以使用辅助函数来创建一个集合,所以你的代码可以变成以下内容:$file = public_path('file/city_master.csv');$customerArr = $this->csvToArray($file);$result = collect($customerArr)->filter(function ($item) use ($query) {&nbsp; &nbsp; // replace stristr with your choice of matching function&nbsp; &nbsp; return false !== stristr($item->City_Code, $query);});if($result->count()) {&nbsp; &nbsp; // success}return 'not in array';我使用stristr()函数来模拟 LIKE 运算符。

慕森卡

在循环本身中还有一个计数函数;每次循环循环时都会对 count($customerArr) 进行不必要的评估。将计数存储在一个变量中并改用它,这将改善您的执行时间。$count = count($customerArr);for ($i = 0; $i < $count; $i++){//dd($customerArr );$userreg = $customerArr->where('City_Code', 'like', '%'.$query.'%')->get();}
打开App,查看更多内容
随时随地看视频慕课网APP