2008-08-24 5 views
12

두 개의 동물 어레이가 있습니다 (예를 들어).PHP 배열을 병합하려면 어떻게해야합니까?

$array = array(
    array(
     'id' => 1, 
     'name' => 'Cat', 
    ), 
    array(
     'id' => 2, 
     'name' => 'Mouse', 
    ) 
); 

$array2 = array(
    array(
     'id' => 2, 
     'age' => 321, 
    ), 
    array(
     'id' => 1, 
     'age' => 123, 
    ) 
); 

ID로 두 개의 어레이를 병합 할 수 있습니까?

답변

3

에릭이 배열 키로 제안한 바를 수행하고 $array2의 문자를 $results에 병합합니다.

$results = array(); 

foreach($array as $subarray) 
{ 
    $results[$subarray['id']] = array('name' => $subarray['name']); 
} 

foreach($array2 as $subarray) 
{ 
    if(array_key_exists($subarray['id'], $results)) 
    { 
     // Loop through $subarray would go here if you have extra 
     $results[$subarray['id']]['age'] = $subarray['age']; 
    } 
} 
3

우선, ID (또는 php 배열이 imo 인 매핑 스타일 배열에서 키)를 ID로 사용하지 않는 이유는 무엇입니까?

$array = array(
    1 => array(
     'name' => 'Cat', 
    ), 
    2 => array(
     'name' => 'Mouse', 
    ) 
); 

그 후 당신은 다른 항목에 array_merge을 수행하는 하나 개의 배열을 foreach는해야합니다 적어도 그런

foreach($array2 as $key=>$value) { 
    if(!is_array($array[$key])) $array[$key] = $value; 
    else $array[$key] = array_merge($array[key], $value); 
} 

뭔가. 아마도 더 좋은 해결책이 있을까요?

-3
$new = array(); 
foreach ($array as $arr) { 
    $match = false; 
    foreach ($array2 as $arr2) { 
     if ($arr['id'] == $arr2['id']) { 
      $match = true; 
      $new[] = array_merge($arr, $arr2); 
      break; 
     } 
    } 
    if (!$match) $new[] = $arr; 
} 
1

@Andy

나는 이미 검토 한하고 다차원 배열을 병합 할 수있는 방법을 보지 못했다. 어쩌면 예를들 수 있습니다. 나는 아래의 코드는 매우 느리게 될 것이라고 생각대로 내가 할 필요가 무엇 아마

@kevin

. ADOdb (및 다른 쿼리 용 ODBC)를 사용하고 있기 때문에 실제 코드가 약간 다르지만 작동하게 만들고 내 대답을 게시 할 것입니다.

foreach($array as &$animal) 
{ 
    foreach($array2 as $animal2) 
    { 
     if($animal['id'] === $animal2['id']) 
     { 
      $animal = array_merge($animal, $animal2); 
      break; 
     } 
    } 
} 
3
<?php 
     $a = array('a' => '1', 'b' => array('t' => '4', 'g' => array('e' => '8'))); 
     $b = array('c' => '3', 'b' => array('0' => '4', 'g' => array('h' => '5', 'v' => '9'))); 
     $c = array_merge_recursive($a, $b); 
     print_r($c); 
?> 

array_merge_recursive — Merge two or more arrays recursively

출력 :

 Array 
(
    [a] => 1 
    [b] => Array 
     (
      [t] => 4 
      [g] => Array 
       (
        [e] => 8 
        [h] => 5 
        [v] => 9 
       ) 

      [0] => 4 
     ) 

    [c] => 3 
) 
1

나는이 작동

그러나 나는 그것이 두 번째 루프를 통해 매번 간다 매우 느릴 것이라고 생각 차라리 을 array_merge 이상으로 선호합니다. ormance 문제는, 내 솔루션은 다음과 같습니다

<?php 
array_splice($array1,count($array1),0,$array2); 
?> 
1
foreach ($array as $a) 
    $new_array[$a['id']]['name'] = $a['name']; 

foreach ($array2 as $a) 
    $new_array[$a['id']]['age'] = $a['age']; 

이것은 결과 : PHP 5

[1] => Array 
     (
      [name] => Cat 
      [age] => 123 
     ) 

    [2] => Array 
     (
      [name] => Mouse 
      [age] => 321 
     ) 
1
<?php 
$array1 = array("color" => "red", 2, 4); 
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); 
$result = array_merge($array1, $array2); 
print_r($result); 
?> 
1

.난 당신이 결과로 원하는 생각입니다

Array (
    [0] => Array 
     (
      [id] => 2 
      [name] => Cat 
      [age] => 321 
     ) 

    [1] => Array 
     (
      [id] => 1 
      [name] => Mouse 
      [age] => 123 
     ) 
) 

: 3 당신은 결과 배열이 같아야있어()

http://www.php.net/manual/en/function.array-replace-recursive.php

array_replace_recursive와 병합 이런 종류의 작업을 수행 할 수 있습니다.

관련 문제