使用两个循环填充一个数组

时间:2018-01-09 20:29:43

标签: php arrays symfony loops object

我有一个对象,其中包含我的所有文章。

我正在循环我的对象以填充数组,我为每篇文章创建了一个关联表。

在我的对象中我还有一个Categories对象,我想在之前完成的每个关联数组的末尾添加每个类别的标签,但是 我不知道该怎么做..在Categories对象中可能有多个标签。

我的代码:

$articles = $this->entityManager->getRepository('SGBundle:Article')->findBy([], ['id'=>'desc']);

$arrayCollection = [];

foreach($articles as $article) {

    $arrayCollection[] = [
        'id' => $article->getId(),
        'date_publication' => $article->getDatePublication(),
        ...
    ];

    foreach($article->getCategories() as $categorie) {
        $arrayCollection[] = ['categorie' => $categorie->getLibelle()];
    }
}

enter image description here

在我的屏幕截图中,每个文章都有一个包含36个值的数组和一个包含1个值的数组,我希望这个表位于包含36个值的表中。有可能吗?

2 个答案:

答案 0 :(得分:1)

首先收集类别,然后将'em'添加到文章项目:

foreach($articles as $article) {
    $categories = [];
    foreach($article->getCategories() as $categorie) {
        $categories[] = $categorie->getLibelle();
    }

    $arrayCollection[] = [
        'id' => $article->getId(),
        'date_publication' => $article->getDatePublication(),
        ...
        // 
        'categorie' => $categories,
    ]; 
}

答案 1 :(得分:0)

如果article.categories字段被标记为懒惰,则默认情况下它不会被充电,$article->getCategories()将在每个循环回合中执行新查询。

在这种情况下,您可能需要一个自定义DQL查询来代替简单的findBy,以便优化它并在一个请求中获得所需的确切数组。

另请注意,您当前的查询正在获取数据库的所有文章。虽然这可能是您的目的,但请记住,随着数据的增长,这可能会变得非常沉重。在大多数情况下,应该对这种查询进行分页。