2010-01-29 5 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

답변

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

+0

숫자 색인 생성에 대해 언급 해 주셔서 감사합니다. 더 이상 키를 병합 할 필요가 없도록 배열을 정리했습니다! – Ray

+0

위대한 답변, 정말 고마워요. 당신은 몇 시간의 시험과 노력 끝에 나를 도왔습니다. 감사합니다 @ Tatu – justinhartman