Я пытаюсь получить общее количество листов в загруженном файле Excel в Laravel. Файл, который я загружаю, имеет 3 листа. Так что я ожидаю получить вывод $counter = 3
,
Код:
$counter=0;
Excel::load($fileDetails['file_path'], function($sheet) use($counter) {
$sheet->each(function($sheet) use($counter) {
echo "It works</br>";
$counter++;
});
});
echo $counter; exit;
Выход:
It works
It works
It works
0 //-- This is $counter, which is not get incremented. It has to be 3.
use
работает как передача параметров. По умолчанию значение передается по значению, поэтому любые изменения, сделанные внутри функции, не будут отражены за пределами области действия функции.
Однако, если вы передадите переменную по ссылке, изменения будут отражены.
Обновите свой код до:
$counter=0;
// add & to have var passed by reference
Excel::load($fileDetails['file_path'], function($sheet) use(&$counter) {
// add & to have var passed by reference
$sheet->each(function($sheet) use(&$counter) {
echo "It works</br>";
$counter++;
});
});
echo $counter;
exit;
Других решений пока нет …