2012-12-08 4 views
1

더 어려워지고 있습니다. 이 같은 질의 결과 가지고별개의 다중 배열을 단일 배열로 병합

결과 = 배열 ​​(

A = array(
     [a]=>'1', 
     [b] =>'2', 
    ); 

B = array(
     [a] =>'1', 
     [b] =>'3', 
    ); 

C = array(
     [a] =>'1', 
     [b] =>'4', 
    ); 

**and more...** 

)를;

그래서 나는이 같은 하나 개의 배열로 병합하는 방법 :

결과 = 배열 ​​(

 Z = array(

     [a] =>'1', 
     [b] => array(

       [0] =>'2', 
       [1] =>'3', 
       [2] =>'4', 
     ); 

    ); 

);

감사 드려 죄송합니다.

답변

2

이 작업에만 키 (등 문자열, 숫자)에 기본 값을 가질 계획이라면 당신은 PHP Manual

+0

array_merge는 두 연관 배열에서 발생하는 키의 값을 후자의 연관 배열의 값으로 대체합니다. –

1

에 array_merge 함수로 볼 수 있습니다 :

<?php 

function array_combine_keys($a, $b) { 
    $c = $a; 
    foreach ($b as $k=>$v) { 
     // Value can be only primitive, not an array itself 
     if (isset($a[$k]) && $a[$k] !== $v) { 
      $c[$k] = array($a[$k], $v); 
     } else { 
      $c[$k] = $v; 
     } 
    } 
    return $c; 
} 

$a = array('a' => '1', 'b' => '2'); 
$b = array('a' => '1', 'b' => '3', 'c' => '5'); 

var_dump(array_combine_keys($a, $b)); 

?> 

array(3) { 
    ["a"]=> 
    string(1) "1" 
    ["b"]=> 
    array(2) { 
    [0]=> 
    string(1) "2" 
    [1]=> 
    string(1) "3" 
    } 
    ["c"]=> 
    string(1) "5" 
} 

더 다양한 방법입니다 값의 배열을 허용하고, 키가 항상 무작위 배열인지 확인하십시오. 이는 키가 배열인지 또는 결과를 탐색 할 때 배열이 아닌지를 확인하기 위해 추가 논리가 필요하지 않음을 의미합니다. (+)는 두 배열의 합집합입니다.

<?php 

function array_combine_keys($a, $b) { 
    $c = $a; 
    foreach ($b as $k=>$v) { 
     if (!is_array($v)) { 
      $v = array($v); 
     } 
     if (isset($a[$k])) { 
      $av = $a[$k]; 
      if (!is_array($av)) { 
       $av = array($av); 
      } 
      $c[$k] = $av + $v; 
     } else { 
      $c[$k] = $v; 
     } 
    } 
    return $c; 
} 

$a = array('a' => '1', 'b' => array('2', '4')); 
$b = array('a' => '1', 'b' => array('3'), 'c' => '5'); 

var_dump(array_combine_keys($a, $b)); 

?> 

array(3) { 
    ["a"]=> 
    array(1) { 
    [0]=> 
    string(1) "1" 
    } 
    ["b"]=> 
    array(2) { 
    [0]=> 
    string(1) "2" 
    [1]=> 
    string(1) "4" 
    } 
    ["c"]=> 
    array(1) { 
    [0]=> 
    string(1) "5" 
    } 
} 
+0

정말 고마워. 정말 많이 도와 줘. –

1

나는 왜 당신 keep asking the same question을 모르지만 여기에 내 문제가 있습니다.

$result = array_merge_recursive($a, $b, $c); 
foreach($result as $k => $v) $result[$k] = array_unique($v); 
print_r($result); 
관련 문제