Как мы получаем данные из CSV-файла, определяя условие где? - PullRequest
0 голосов
/ 15 мая 2019

Я хочу получить данные из CSV-файла, определив условие where в laravel. У меня уже есть функция для этого, и она будет правильно получать данные в массиве $ customerArr Но я хочу использовать, откуда условие Все данные поступают изФайл 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 ]

1 голос
/ 15 мая 2019

Вы не можете использовать 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.

0 голосов
/ 15 мая 2019

Также у вас есть функция подсчета в самом цикле;count ($ customerArr) оценивается без необходимости каждый раз, когда цикл повторяется.Сохраните счетчик в переменной и используйте его вместо этого, что улучшит ваше время выполнения.

$count = count($customerArr);
for ($i = 0; $i < $count; $i++)
{
//dd($customerArr );
$userreg = $customerArr->where('City_Code', 'like', '%'.$query.'%')->get();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...