创建构成数组的json对象

时间:2016-06-02 14:55:36

标签: php arrays json laravel

在laravel中,我从我的查询中获取文章列表,之后我将获得这些文章的所有图像文件和视频的评论和路径。我的目标是创建一个看起来像这样的json对象数组:

[{
   id: id,
   title: title,
   summary: summary,
   comments: 'commentsCount',
   images: {
      path: 'path',
      path: 'path',
      path: 'path',
    }
 },
...
]

不确定如何组合并制作这种数组,这是我失败的尝试:

$result = Article::where('publish', 1)->orderBy('created_at', 'desc')->paginate(15);
    $articles = [];

    foreach($result as $article){
      $articles[] = $article;
      $articles[]['comments'] = $article->comments()->count();

      foreach ($article->medias as $media){
        $articles[]['comments']['images'] = $media->path;
      }
    }

更新的代码:

这是给我想要结果的最简单的解决方案:

$result = Article::where('publish', 1)->orderBy('created_at', 'desc')->paginate(15);

    foreach($result as $article){
      $articles[$article->id] = $article;
      $articles[$article->id]['comments'] = $article->comments()->count();
      $articles[$article->id]['medias'] = $article->medias()->get();
    }

    return $articles;

1 个答案:

答案 0 :(得分:0)

我怀疑您的问题与您使用[]

的方式有关
foreach($result as $article){
  $articles[] = $article;
  $articles[]['comments'] = $article->comments()->count();

  foreach ($article->medias as $media){
    $articles[]['comments']['images'] = $media->path;
  }
}

每次你写$articles[] ... = ...时,你都会在数组的末尾附加一个全新的元素。

如果你想追加一个元素,然后附加子元素,你需要一个不同的方法:

  1. 在括号内指定一个索引(您可以将其作为变量)。

  2. 首先将元素组合成一个临时变量,在循环迭代结束时将其追加一次。