2010-01-29 3 views
2

J'ai un tableau multidimensionnel appelé chansons $, ce qui produit les éléments suivants:PHP - Fusionner les clés du tableau en double dans un tableau multidimensionnel

Array 
(
    [0] => Array 
     (
      [Michael Jackson] => Thriller 
     ) 

    [1] => Array 
     (
      [Michael Jackson] => Rock With You 
     ) 

    [2] => Array 
     (
      [Teddy Pendergrass] => Love TKO 
     ) 

    [3] => Array 
     (
      [ACDC] => Back in Black 
     ) 
) 

Je voudrais fusionner les tableaux qui ont des clés en double, donc je peux obtenir ce qui suit:

Array 
(
    [0] => Array 
     (
      [Michael Jackson] => Array 
      (
       [0] => Thriller 
       [1] => Rock With You 
      ) 
     ) 

    [1] => Array 
     (
      [Teddy Pendergrass] => Love TKO 
     ) 

    [2] => Array 
     (
      [ACDC] => Back in Black 
     ) 
) 

Comment faire?

points de bonus pour me donner le code de sortie du tableau comme:

<h2>Michael Jackson</h2> 
<ul> 
<li>Thriller</li> 
<li>Thriller</li> 
</ul> 

<h2>Teddy Pendergrass</h2> 
<ul> 
<li>Love TKO</li> 
</ul> 

<h2>ACDC</h2> 
<ul> 
<li>Back in Black</li> 
</ul> 
+0

La réponse à votre question est probablement ['array_merge_recursive'] (http://php.net/array_merge_recursive). – hakre

Répondre

12

Cela devrait le faire, ce n'est pas exactement ce que vous voulez, mais je ne vois pas une raison pour laquelle vous auriez besoin d'indexer le tableau résultant numériquement, puis par l'artiste.

$source = array(
    array('Michael Jackson' => 'Thriller'), 
    array('Michael Jackson' => 'Rock With You'), 
    array('Teddy Pendergrass' => 'Love TKO'), 
    array('ACDC' => 'Back in Black') 
); 

$result = array(); 

foreach($source as $item) { 
    $artist = key($item); 
    $album = current($item); 

    if(!isset($result[$artist])) { 
     $result[$artist] = array(); 
    } 
    $result[$artist][] = $album; 
} 

Et vous pouvez boucler le tableau $result et construire votre HTML comme ceci:

foreach($result as $artist => $albums) { 
    echo '<h2>'.$artist.'</h2>'; 
    echo '<ul>'; 
    foreach($albums as $album) { 
     echo '<li>'.$album.'</li>'; 
    } 
    echo '</ul>'; 
} 

Ce qui donnera une liste similaire que vous avez décrit.

+0

Merci Tatu, c'est exactement ce que je voulais! – Ray

+0

Merci également de mentionner l'indexation numérique. J'ai nettoyé le tableau, donc je n'ai plus besoin de fusionner les touches! – Ray

+0

Bonne réponse, merci beaucoup. Tu m'as aidé après des heures de procès et d'efforts. Merci @Tatu – justinhartman

Questions connexes