使用循环获取PHP中的数组数组

时间:2019-03-26 12:42:20

标签: php arrays loops symfony

我正在使用PHP 5.6开发Symfony 3.4。

这是我的问题的背景:

我有一个“信息”表,其中包含几行。我想对这些行进行排序,并根据称为“区域”的特定列显示它们。所以目标是例如

“第1区” *与该区域相对应的信息行 “第2区” *与该区域相对应的信息行 ...

我在存储库中实现了我的功能,并且还在Twig下进行了布局。一切正常。我要做的就是优化控制器上的代码以使其更加整洁。

因此我的想法是:

  1. 通过查询检索包含所有现有不同区域的数组。
  2. 使用该数组的每个值作为SQL查询的参数在该数组上循环,该SQL查询检索与传递的字段相对应的行并在数组变量中对其进行检索
  3. 在每个包含每个区域的数组的另一个数组中,对每个区域的数组进行array_push()。

但是我不能。这是我的代码

存储库:

public function getInformationsZone($zone)
    {
        $queryBuilder = $this->createQueryBuilder("i")
        ->where("i.zone = :zone")
        ->orderBy("i.updatedAt","DESC")
        ->orderBy("i.criticite","DESC")
        ->setParameter('zone',$zone);

        return $queryBuilder->getQuery()->getResult();
    }

    public function getZonesActives()
    {
        $queryBuilder = $this->createQueryBuilder("i")
        ->select("i.zone")
        ->distinct(true);

        return $queryBuilder->getQuery()->getResult();
    }

控制器

/**
     * Lists all information entities.
     *
     * @Route("/", name="informations_index")
     * @Method("GET")
     */
    public function indexAction()
    {
        $em = $this->getDoctrine()->getManager();

        $information = $em->getRepository('PagesBundle:Information')->findAll();


        $listZones = $this->getDoctrine()->getRepository('PagesBundle:Information')->getZonesActives();
        $tabInfos = array();

        foreach($listZones as $key=>$value)
        {
            $zone = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone($value);
            array_push($tabInfos,$zone);
        }



// This is what i did just before

      /*  $infosZone1 = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone("Zone 1");
        $infosZone2 = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone("Zone 2");
        $infosZone3 = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone("Zone 3");

        $tabInfos = array($infosZone1,$infosZone2,$infosZone3);*/

        return $this->render('information/index.html.twig', array(
           /* 'information' => $information,
            'infosZone1'=> $infosZone1,
            'infosZone2'=> $infosZone2,
            'infosZone3'=> $infosZone3,*/
            'tabInfos'=>$tabInfos,
        ));
    }

我遇到此错误:

执行'SELECT i0_.id AS id_0,i0_.contenu AS contenu_1,i0_.updated_at AS Updated_at_2,i0_.zone AS zone_3,i0_.titre AS titre_4,i0_.criticite AS commentite_5从信息i0_那里i0_ .zone =?使用参数[“ Zone 1”]进行i0_.criticite DESC'的订单:

SQLSTATE [HY093]:参数号无效:参数未定义

1 个答案:

答案 0 :(得分:1)

替换:

$zone = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone($value);

与此:

$zone = $this
    ->getDoctrine()
    ->getRepository('PagesBundle:Information')
    ->getInformationsZone($value->getZone());

您要将所有区域实体传递给getInformationsZone方法。

因此,要获取区域的标题,必须调用区域的getter。

$value$value->getZone();


编辑:因此,只需将$value->getZone()更改为$value['zone'];