PHP - объединяет дубликаты ключей массива в многомерный массив - PullRequest
2 голосов
/ 30 января 2010

У меня есть многомерный массив, названный $ 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>

1 Ответ

12 голосов
/ 30 января 2010

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

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

Что приведет к тому же списку, который вы описали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...