문제
나는 두 마리의 동물이 있습니다 (예를 들어).
$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로 두 배열을 하나로 병합하려면 어떻게해야합니까?
해결책
이것은 Erik이 제안한 일을 수행하고 (ID NO. 배열 키) Vlaues를 합병합니다. $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'];
}
}
다른 팁
@andy
그것은 나의 첫 번째 생각 이었지만 그것은 효과가 없습니다 - 그러나 array_merge_recursive 효과가있을 수 있습니다 - 지금 당장 확인하기에는 너무 게으릅니다.
먼저, ID를 인덱스로 사용하지 않는 이유 (또는 PHP 배열이 IMO 인 맵핑 스타일 배열에서 키로 사용하지 않겠습니까?
$array = array(
1 => array(
'name' => 'Cat',
),
2 => array(
'name' => 'Mouse',
)
);
그런 다음 다른 배열을 통해 배열을 통해 배열을 수행해야합니다.
foreach($array2 as $key=>$value) {
if(!is_array($array[$key])) $array[$key] = $value;
else $array[$key] = array_merge($array[key], $value);
}
적어도 그런 것. 아마도 더 나은 솔루션이 있습니까?
<?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 - 재귀 적으로 두 개 이상의 배열을 병합합니다
출력 :
Array
(
[a] => 1
[b] => Array
(
[t] => 4
[g] => Array
(
[e] => 8
[h] => 5
[v] => 9
)
[0] => 4
)
[c] => 3
)
나는 이미 그것을보고 다차원 배열을 병합하는 데 어떻게 도움이 될 수 있는지 알지 못했습니다. 어쩌면 당신은 예를들 수 있습니다.
아래 코드가 매우 느리다고 생각하기 때문에 아마도 내가해야 할 일일 것입니다. ADODB (및 다른 쿼리의 경우 ODBC)를 사용하고 있기 때문에 실제 코드는 약간 다르지만 작동하게하고 내 자신의 답변을 게시하겠습니다.
이것은 작동하지만 매번 두 번째 루프를 통과함에 따라 매우 느리게 될 것이라고 생각합니다.
foreach($array as &$animal)
{
foreach($array2 as $animal2)
{
if($animal['id'] === $animal2['id'])
{
$animal = array_merge($animal, $animal2);
break;
}
}
}
foreach ($array as $a)
$new_array[$a['id']]['name'] = $a['name'];
foreach ($array2 as $a)
$new_array[$a['id']]['age'] = $a['age'];
그리고 결과는 다음과 같습니다.
[1] => Array
(
[name] => Cat
[age] => 123
)
[2] => Array
(
[name] => Mouse
[age] => 321
)
<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
?>
PHP 5.3을 사용하면 Array_Replace_Recursive ()와 이런 종류의 병합을 수행 할 수 있습니다.
http://www.php.net/manual/en/function.array-replace-recursive.php
결과 배열은 다음과 같습니다.
Array (
[0] => Array
(
[id] => 2
[name] => Cat
[age] => 321
)
[1] => Array
(
[id] => 1
[name] => Mouse
[age] => 123
)
)
결과적으로 당신이 원했던 것입니다.
차라리 선호합니다 array_splice
~ 위에 array_merge
성능 문제로 인해 내 솔루션은 다음과 같습니다.
<?php
array_splice($array1,count($array1),0,$array2);
?>
$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;
}