PHP分组阵列

问题描述:

我有以下阵列:PHP分组阵列

$comments = array(); 
$comments[] = array('member_id' => '17', 
        'time'  => '2011-05-10 11:10:00', 
        'name'  => 'John Smith', 
        'comment' => 'Test Comment 1'); 
$comments[] = array('member_id' => '25', 
        'time'  => '2011-05-10 11:26:00', 
        'name'  => 'David Jones', 
        'comment' => 'Test Comment 2'); 
$comments[] = array('member_id' => '17', 
        'time'  => '2011-05-10 13:15:00', 
        'name'  => 'John Smith', 
        'comment' => 'Test Comment 3'); 

我将如何去通过member_id分组呢?所以,我就可以用下面的格式来显示网页上的评论:

约翰·史密斯(2条评论)

  • 2011-05-10 11点10分00秒|测试评论1
  • 2011-05-10 13:15:00 |测试点评3

大卫琼斯(1条评论)

  • 2011-05-10 11:26:00 |测试点评2

一种解决方案是按name字段进行排序它们(检查usort为该),但更容易可能只是填充在这样一个新的数组:

$grouped = array(); 
foreach($comments as $c) { 
    if(!isset($grouped[$c['name']]) { 
    $grouped[$c['name']] = array(); 
    } 

    $grouped[$c['name']][] = $c; 
} 

//Now it's just a matter of a double foreach to print them out: 
foreach($grouped as $name => $group) { 
    //print header here 
    echo $name, "<br>\n"; 

    foreach($group as $c) { 
    //print each comment here 
    } 
} 
+0

另请注意,您可以在第一个foreach循环后使用kso​​rt获取按作者姓名排序的注释。 – 2011-05-10 12:12:10

我建议使用第二组阵列

$groups[] = array(); 
foreach($comment as $k=>$v) { 
    $groups[$v['member_id']][] = $k 
} 

,然后再打印它

foreach($group as $m_id=>$arr) { 
    echo "Group $m_id<br/>\n"; 
    foreach($arr as $k) { 
     echo $comment[$k]."<br/>\n"; 
    } 
} 

你应该尝试采取多维数组。

$comment_groups[] = array(); 
    $m_id = ''; 

    foreach($comment_groups as $key=>$val) { 
     if($key == 'member_id'){ 
      $m_id = $val; 
      } 
      $comment_groups[$m_id]][] = $val; 
    } 

然后,您可以打印您想要显示。