如何按类别列出评论? (操纵数组)

时间:2016-03-15 08:51:04

标签: php arrays

我有一个名为$comments的数组。

当我var_dump($comments);

这是结果。

array
  0 => 
    object(stdClass)[11]
      public 'comment_id' => string '1' (length=1)
      public 'comment_article_id' => string '1' (length=1)
      public 'comment_user_id' => string '2' (length=1)
      public 'comment' => string 'Comment to article_id 1' (length=11)
      public 'comment_date' => string '2016-03-10 20:06:43' (length=19)
  1 => 
    object(stdClass)[9]
      public 'comment_id' => string '3' (length=1)
      public 'comment_article_id' => string '1' (length=1)
      public 'comment_user_id' => string '2' (length=1)
      public 'comment' => string 'Another comment to article_id 1.' (length=14)
      public 'c
      ' => string '2016-03-10 20:06:43' (length=19)
  2 => 
    object(stdClass)[6]
      public 'comment_id' => string '5' (length=1)
      public 'comment_article_id' => string '2' (length=1)
      public 'comment_user_id' => string '2' (length=1)
      public 'comment' => string 'Comment to article_id 2' (length=26)
      public 'comment_date' => string '2016-03-10 20:06:43' (length=19)

这是我的功能,它给了我上面的结果:

  public function ListComments($userid) {
    $comments = $this->FindComments($userid);

    var_dump($comments);  

  }

我想列出这样的评论:

  
      
  • 1(即comment_article_id)
  •   
     

-Comment to article_id 1

     

- 对article_id 1的另一个评论。

     
      
  • 2
  •   
     

-Comment to article_id 2

我不知道如何使用当前数组来获得这样的结果。

我希望在FindComments()函数没有任何更改的情况下归档此内容。

我必须做我在ListComments()函数中所做的一切。

可能我需要一个foreach循环,但我没有申请。

2 个答案:

答案 0 :(得分:2)

要通过操作已经收到的注释数组来实现这一点,您只需要循环它并将所有元素放在bidimensional关联数组中,其中键是文章ID

$results

然后按照你想要的方式输出它只需要通过echo '<ul>'; foreach ($results as $key => $comments) { echo '<li>' . $key . '</li>'; echo '<ul>'; foreach($comments as $comment) { echo '<li>' . $comment->comment . '</li>'; } echo '</ul>'; } echo '</ul>'; 数组和所有注释来打印内容。

  

请注意,我认为回应html是一种不好的做法。这是公正的   快速向您展示如何实现您想要的输出。

$data = array(
    array(
        'id' => '609',
        'datetime' => 'stop'
    ),
    array(
        'id' => '610',
        'datetime' => 'stop'
    ),
    array(
        'id' => '611',
        'datetime' => '2016/03/28 13:00:56'
    ),
    array(
        'id' => '612',
        'datetime' => '2016/04/03 01:00:00'
    )
);
echo(json_encode($data));

答案 1 :(得分:2)

您可以这样做,首先使用该文章ID键入索引:

// create temporary associative array, keyed by comment_article_id
$comments2 = [];
foreach($comments as $comment) {
    $comments2[$comment->comment_article_id][] = $comment;
}
// now output via that new array:
foreach ($comments2 as $key => $arr) {
    echo "comment article ID: $key\n";
    foreach ($arr as $comment) {
        echo "comment: " . $comment->comment . "\n";
    }
}