PHP группирующий массив - PullRequest
1 голос
/ 10 мая 2011

У меня есть следующий массив:

$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

Ответы [ 3 ]

4 голосов
/ 10 мая 2011

Одним из решений является их сортировка по полю имени (для этого проверьте 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
  }
}
2 голосов
/ 10 мая 2011

Я бы предложил использовать второй массив группировки

$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";
    }
}
1 голос
/ 10 мая 2011

Вы должны попробовать взять многомерный массив.

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

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

Затем вы можете распечатать, как вы хотите отобразить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...