PHP – слияние дубликатов ключей массива в многомерном массиве

У меня есть многомерный массив под названием $ songs, который выводит следующее:

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> 

Это должно сделать это, это не совсем то, что вы хотите, но я не вижу причины, по которой вам нужно будет индексировать полученный массив численно, а затем художником.

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

Это приведет к аналогичному списку, который вы описали.