Foreach循环与饼干

时间:2016-03-09 09:45:26

标签: php cookies

我有几个像这样构建的cookie

Parkplatz['1']
Parkplatz['2']
Parkplatz['3']

现在我想要所有名为“Parkplatz”的cookie进行数据库查询并找到带有相应Uid的条目,我尝试这样做(我使用的是extbase,但普通的PHP也可以):

$carid = $this->request->getArgument('car_id');
setcookie('Parkplatz[' . $carid . ']', '' . $carid . '', time() + (10 * 365 * 24 * 60 * 60));

foreach($_COOKIE['Parkplatz'] as $cookies){
                    $cars = $this->carRepository->findByUid($cookies);
                    $this->view->assign('cars', $cars);
                };

这样可行,但只能使用名为“Parkplatz”的第一个cookie设置。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为,如果你有一个cookie或一组cookie,你在循环中会感到困惑。

您的变量$cookies实际上是一个Cookie。因此,在循环中假定Parkplatz[1]首先出现,然后找到$cars,并在视图中将它们分配给'cars'。但是,下一个循环将覆盖视图中'cars'的最后一个分配。

要解决此问题,您需要在视图中添加多个车辆清单。最后,这可能是这样的:

$viewCounter = 1;
foreach($_COOKIE['Parkplatz'] as $oneCookie){
   $cars = $this->carRepository->findByUid($oneCookie);
   $this->view->assign('car_' . $viewCounter, $cars);
   $viewCounter++;
}

当然,这需要在模板中进行一些准备工作,而且解决方案可能过于静态。

或者,收集所有的汽车清单,如下:

$allCars = array();

foreach($_COOKIE['Parkplatz'] as $oneCookie){
    $cars = $this->carRepository->findByUid($oneCookie);
    $allCars[] = $cars;
}

$this->view->assign('cars', $allCars);

我无法确定什么更适合您的最终解决方案,但我希望这会帮助您找到方法。