我想通过定义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';
答案 0 :(得分:1)
您不能在PHP数组上使用where
,您是从csvToArray
方法返回集合吗?如果这样做,则不应在集合上调用get()
,因为这是查询生成器的代码。
因此,我假设您只是从方法中返回一个数组,然后可以使用helper函数进行集合,因此您的代码可以如下:
$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运算符。
答案 1 :(得分:0)
在循环本身中也有一个count函数;每次循环循环时都会不必要地计算count($ customerArr)。将计数存储在变量中,并使用该变量,这将缩短执行时间。
$count = count($customerArr);
for ($i = 0; $i < $count; $i++)
{
//dd($customerArr );
$userreg = $customerArr->where('City_Code', 'like', '%'.$query.'%')->get();
}