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

时间:2019-05-15 17:02:59

标签: php laravel 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';

2 个答案:

答案 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();
}