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
}
}
答
我建议使用第二组阵列
$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;
}
然后,您可以打印您想要显示。
另请注意,您可以在第一个foreach循环后使用ksort获取按作者姓名排序的注释。 – 2011-05-10 12:12:10