【问题标题】:Symfony storing results of foreach loopSymfony 存储 foreach 循环的结果
【发布时间】:2015-08-10 16:35:08
【问题描述】:

我想知道是否可以存储 foreach 循环的结果。 我不知道如何更详细地解释我的问题。

所以让我们说下面给了我 3 个不同的数组

$events = $this->getDoctrine()->getRepository('TestBundle:Events')->findBy(array('event' => $eventId));

#name,color#

1.派对,粉红色
2. 泳池派对,蓝色
3. B-day,红色

foreach $events 避免非对象调用。

foreach($events as $e)
{
    $name = $e->getName();
    $color = $e->getColor();
}

现在我可以将数组返回给 twig 并 for 循环它们,但是我可以将它们存储到控制器中的数组中吗?

我当前的代码

$events = 
$this->getDoctrine()->getRepository('TestBundle:Events')->findBy(array('event' => $eventId));

foreach($events as $e)
{                   
    $name = $e->getName();
    $color = $e->getColor();

    $array = array(array("$name", "$color"));
}

return new JsonResponse($array);

有了这个,我只得到最后一个数组。在这种情况下B-day,red。希望有人可以帮助我解决我的问题。感谢您的时间!

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    您需要将结果存储在循环之外,以便在迭代之间保持不变。根据您的需要,它看起来像:

    $output = array();
    
    foreach($events as $event)
    {
        $output[$event->getName()] = $event->getColor();
    }
    
    return new JsonResponse($output);
    

    ...或者像这样...

    $output = array();
    
    foreach($events as $event)
    {
        $output[] = array($event->getName(), $event->getColor());
    }
    
    return new JsonResponse($output);
    

    前者的输出看起来像{"B-day": "red", ...},而后者看起来像[["B-day", "red"], ...]


    您通常会选择前一个输出,因为建议用于 AJAX 的 JSON 中最外层的类型是对象,而不是数组 (for security reasons)。

    【讨论】:

      【解决方案2】:

      虽然这不能直接回答您的问题,但看起来您正在构建某种 json API。如果这是真的,我强烈建议使用Fractal 之类的东西来进行这种类型的实体>> api 转换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        • 2017-03-10
        • 2014-06-08
        相关资源
        最近更新 更多