2016-12-15 4 views
0

Итак, я работаю над формой, где хочу, чтобы дать пользователю возможность загрузить CSV, которая позволит автоматически заполнять форму. Поэтому я подумал, что создам функцию, которая читает CSV, а затем бросает каждую строку в массив как объект, после чего я могу вернуться к шаблону Laravel Blade. Моя единственная проблема заключается в том, что массив, возвращаемый функцией, всегда пуст. Есть идеи?Laravel Excel: CSV to Array

private function import($path) { 
    $applicants = []; 

    Excel::load($path, function(LaravelExcelReader $excel) use ($applicants){ 
     $excel->each(function(Collection $line) use ($applicants){  
      $name = new \stdClass;  

      $name->first = $line->get('first'); 
      $name->middle = $line->get('middle'); 
      $name->last = $line->get('last'); 
      $name->birthdate = $line->get('birthdate'); 
      $name->ssn = $line->get('ssn'); 
      $name->email = $line->get('email'); 
      $name->mobile_phone = $line->get('mobile_phone'); 
      $name->home_phone = $line->get('home_phone'); 
      $name->street = $line->get('street'); 
      $name->city = $line->get('city'); 
      $name->state = $line->get('state'); 
      $name->zip = $line->get('zip'); 

      array_push($applicants, $name); 
     }); 
    });  

    return $applicants; 
} 

ответ

2

Попробуйте его с помощью & оператора в use заявлении как:

Excel::load($path, function(LaravelExcelReader $excel) use (&$applicants){ 
    ... 
} 

ИЛИ

Сделать $applicants класс свойство затем использовать его в своей функции как:

private function import($path) { 
    $this->applicants = []; 

    Excel::load($path, function(LaravelExcelReader $excel) { 
     $excel->each(function(Collection $line) {  
      ... 

      array_push($this->applicants, $name); 
     }); 
    });  

    return $this->applicants; 
} 
1

Установка - https://github.com/Maatwebsite/Laravel-Excel

А потом попробуйте ниже код:

$reader = \Excel::load($file_path);     //this will load file 
$results = $reader->noHeading()->get()->toArray(); //this will convert file to array 
foreach($results as $v){ 
    \\process your array 
} 
0

вместо

array_push($applicants, $name); 

попробовать это

$applicants[] = $name; 

дайте мне знать, если он работает