2016-04-25 2 views
0

Я пытаюсь разобрать CSV-файл с информацией о пользователе. CSV отформатирован таким образом:Имя переменной доступа из предыдущего цикла при анализе CSV-файла

userid,username,userlocation 
notecontent, notedate 
notecontent, notedate 
notecontent, notedate 
notecontent, notedate 
userid,username,userlocation 
notecontent, notedate 
notecontent, notedate 

Как вы можете видеть, это беспорядок. Заметки под каждой пользовательской строкой относятся к нему, но не содержат ключа, такого как «идентификатор клиента».

Мой PHP до сих пор для этого приложения Laravel является:

Excel::load("storage/app/notes.csv", function($reader) { 
    $reader->each(function($row) { //Loop through row by row 

     if (strlen($row->client_id) == 5) { 
      $loopclient = $row->client_id; 
      $this->line('client'.$loopclient); 
     } else { 
      //Our note should have client ID of loopclient 
      $this->info($loopclient.": ".$row->client_id); 
     } 

    }); 
})->get(); 

проверить, если строка примечание или ID, видя, если клетка имеет длину 5 символов. Если это так, я хотел установить $ loopid и перейти к следующей строке. Затем, если проверка показывает, что строка является записью, переменная $ loopid всегда должна быть идентификатором самого предыдущего клиента.

Кто-нибудь знает, почему это не будет работать, или лучший способ сделать это?

я получаю ошибку:

Undefined variable: loopclient

Он находит идентификатор на первом цикле, но не доступен на втором? Как я могу установить и сохранить это значение?

Большое спасибо

ответ

1

Переменные, объявленные в функции только в рамках в рамках этой функции, вы должны пройти внешнюю переменную по ссылке, чтобы быть в состоянии остановить «старое» значение, например:

Excel::load("storage/app/notes.csv", function($reader) { 
    $loopclient = -1; //Or proper initial value 
    $reader->each(function($row) use (&$loopclient) { //Loop through row by row 

     if (strlen($row->client_id) == 5) { 
      $loopclient = $row->client_id; 
      $this->line('client'.$loopclient); 
     } else { 
      //Our note should have client ID of loopclient 
      $this->info($loopclient.": ".$row->client_id); 
     } 

    }); 
})->get(); 
+0

Ничего себе, отлично работает! Спасибо. – samiles

Смежные вопросы