Я использую Laravel5.4.
Я хочу добавить значения в массив внутри каждого метода объекта Collection.
Это должно быть легко и просто, но это не сработает.
Ниже приведен код упрощенной версии моего рабочего кода.
пожалуйста помогите!
class ReportController extends Controller { public function daily(ReportRequest $request) { $collection = VisitRecord::whereDate('visited_at', '=', Carbon::today())->get(); $bounceZoneList = []; $collection->groupBy("bounce_zone")->each(function($group, $key) { echo "this line is called."; //add value to the array! $bounceZoneList[] = 1; }); //but it doesn't have any value! var_dump($bounceZoneList); // array(0) { } } }
class ReportController extends Controller { public function daily(ReportRequest $request) { $collection = VisitRecord::whereDate('visited_at', '=', Carbon::today())->get(); $bounceZoneList = []; $collection->groupBy("bounce_zone")->each(function($group, $key) use ($bounceZoneList) { echo "this line is called."; //add value to the array! $bounceZoneList[] = 1; }); //but it doesn't have any value! var_dump($bounceZoneList); // array(0) { } } }
Как так?
И как мне это исправить?
В пределах вашего * каждого * закрытия ключи сначала возвращаются, поэтому это function($key,$group)
Группа $group
возвращается в виде коллекции, поэтому вы можете циклически перебирать ее с помощью цикла
Пытаться :
$group->each(function($item){ array_push($bounceZoneList,$item->**the_entry_you_want_to_be_pushed_to_the_array**); }
class ReportController extends Controller { public function daily(ReportRequest $request) { $collection = VisitRecord::whereDate('visited_at', '=', Carbon::today())->get(); $bounceZoneList = []; $collection->groupBy("bounce_zone")->each(function($group, $key) use (&bounceZoneList) { echo "this line is called."; $bounceZoneList[] = 1; }); var_dump($bounceZoneList); // array(0) { } } }
Использование NG (bounceZoneList)
OK – используйте (& bounceZoneList)