2010-01-29 109 views
2

我有一个多维数组名为$歌曲,输出以下:PHP - 合并重复的数组键多维数组

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 
     ) 
) 

我想合并具有重复键的阵列,这样我就可以得到如下:

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

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

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

我该怎么做?给我的代码输出数组一样

加分点:

<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

你的问题的答案可能是['array_merge_recursive'](http://php.net/array_merge_recursive)。 – hakre 2012-06-12 08:47:13

回答

12

这应该这样做,这是不是你想要什么,但我不明白了一个道理,为什么你需要指数数字结果数组,然后由艺术家。

$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; 
} 

,您可以循环的$result阵列和建立你的HTML这样的:

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

这将导致你描述的类似名单。

+0

谢谢Tatu,那正是我想要的! – Ray 2010-01-29 22:04:08

+0

也感谢提及数字索引。我已经清理了阵列,所以我不需要再合并密钥了! – Ray 2010-01-29 22:16:37

+0

很好的答案,非常感谢。经过数小时的试用和努力,你帮了我。谢谢@塔图 – justinhartman 2014-08-20 22:00:09