2011-05-10 3 views
1

j'ai le tableau suivant:tableau de regroupement 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'); 

par member_id Comment puis-je aller sur le regroupement? Donc, je serai en mesure d'afficher les commentaires sur la page avec la mise en forme suivante:

John Smith (2 commentaires)

  • 2011-05-10 11:10:00 | Commentaire de test 1
  • 2011-05-10 13:15:00 | Test Commentaire 3

David Jones (1 commentaire)

  • 2011-05-10 11:26:00 | Test Commentaire 2

Répondre

4

Une solution consiste à les trier par le champ Nom (consultez usort pour cela), mais encore plus facile pourrait être de remplir juste un nouveau tableau de cette façon:

$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

Notez également que vous pouvez obtenir les commentaires triés par le nom de l'auteur en utilisant ksort après la première boucle foreach. –

2

I suggère d'utiliser un second réseau de regroupement

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

Et puis l'imprimer

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

Vous devriez essayer de prendre un tableau multidimensionnel.

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

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

Ensuite, vous pouvez imprimer comme vous voulez l'afficher.