У меня есть многомерный массив под названием $ 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>'; }
Это приведет к аналогичному списку, который вы описали.