Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将条令数组转换为PHP关联数组_Php_Arrays_Codeigniter_Symfony_Doctrine Orm - Fatal编程技术网

如何将条令数组转换为PHP关联数组

如何将条令数组转换为PHP关联数组,php,arrays,codeigniter,symfony,doctrine-orm,Php,Arrays,Codeigniter,Symfony,Doctrine Orm,我正在将Doctrine2集成到CodeIgniter中 我的实体类News.php <?php namespace Models\Entities; /** * News * * @Table(name="news", indexes={@Index(name="slug", columns={"slug"})}) * @Entity */ class News { //HERE: properties, getter, setter, etc. } 但我希望有

我正在将Doctrine2集成到CodeIgniter中

我的实体类News.php

<?php

namespace Models\Entities;

/**
 * News
 *
 * @Table(name="news", indexes={@Index(name="slug", columns={"slug"})})
 * @Entity
 */
class News {
     //HERE: properties, getter, setter, etc.
}
但我希望有一个关联数组,如下所示:

array (size=6)
  0 => 
    object(Models\Entities\News)[87]
      private 'id' => int 1
      private 'title' => string 'text here' (length=9)
      private 'slug' => string '' (length=0)
      private 'text' => string 'text here' (length=9)
      private 'news' => null
)
array (size=6)
  0 => 
    array (size=4)
      'id' => string '1' (length=1)
      'title' => string 'text here' (length=9)
      'slug' => string '' (length=0)
      'text' => string 'text here' (length=9)
 )

如何将条令实体对象(第一个显示的数组)结果转换为PHP关联数组(第二个显示的数组)?

您正在使用条令ORM。ORM意味着对象关系映射器。使用ORM是因为您希望将结果作为对象。否则,您最好开始阅读DBAL。 那么这一行:

 $news = $this->em->getRepository('Entities:News')->findAll();
如果使用findAll(),则需要一组对象。在教义中,我们讨论的是数组,而不是数组

您可以像普通数组一样使用foreach简单地遍历这些集合。然后可以使用集合中的每个对象,这有一些好处:特别是直接调用一些自定义方法

$newitems = $this->em->getRepository('Entities:News')->findAll();

foreach($newsitems as $newsitem)
{
    echo '<h3>' . $newsitem->getTitle() . '</h3>';
}
$newitems=$this->em->getRepository('Entities:News')->findAll();
foreach($newsitems作为$newsitem)
{
回显“”。$newsitem->getTitle()。';
}

我同意@Frank B的观点,你使用原则的原因是你可以使用对象而不是魔法阵列

但是,如果设置了数组,则可以使用将任何对象转换为数组

只需向实体添加一些注释:

使用Symfony\Component\Serializer\Annotation\Groups;
班级新闻{
/**
*@Groups({“group1”})
*/
受保护的$id;
/**
*@Groups({“group1”})
*/
受保护的产权;
/**
*@Groups({“group1”})
*/
受保护的$slug;
}
然后可以按如下方式转换阵列集合:

$news=$this->em->getRepository('Entities:news')->findAll();
$serializer=$this->getContainer()->get('serializer');
$newsArray=$serializer->normalize($news,'json',['groups'=>['group1']]);

为什么不在类存储库中使用本机条令方法
getArrayResult

在控制器中:

/***/
$news = $this->em->getRepository('Entities:News')->yourMethodName();
/***/
在类存储库中:

class NewsRepository extends \Doctrine\ORM\EntityRepository
{
    public function yourMethodName()
    {
        $query = $this->createQueryBuilder('n');

        /***/

        return $query->getQuery()->getArrayResult();
    }
}
class NewsRepository extends \Doctrine\ORM\EntityRepository
{
    public function yourMethodName()
    {
        $query = $this->createQueryBuilder('n');

        /***/

        return $query->getQuery()->getArrayResult();
    }
}