2008-08-24 32 views
12

İki tür hayvanım var (örneğin).PHP dizilerini nasıl birleştirebilirim?

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

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

İki diziyi kimliğe göre nasıl bir araya getirebilirim?

cevap

3

Bu, Erik'in önerdiği (dizi anahtarı olarak kimlik no) ve $array2 ile $results arasındaki vellaları birleştirir.

$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

İlk olarak, kimliği neden dizin olarak kullanmıyorsunuz (ya da php dizilerinin imo olduğu eşleme stili dizisinde anahtar)?

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

bundan sonra diğerinin öğeler üzerinde array_merge gerçekleştirerek, bir dizi aracılığıyla foreach gerekecek: En az böyle

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

şey. Belki daha iyi bir çözüm var mı?

-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

ben zaten baktım ve çok boyutlu diziler birleştirme nasıl yardımcı olabileceğini görmedi. Belki bir örnek verebilirsin. Aşağıda kod çok yavaş olacağını düşünüyorum olarak yapmam gerekenleri muhtemelen

@kevin

. Gerçek kod biraz farklı çünkü ADOdb (ve diğer sorgu için ODBC) kullanıyorum ama çalışmayı başlatacağım ve kendi yanıtımı göndereceğim.

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

çıkışlar:

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

      [0] => 4 
     ) 

    [c] => 3 
) 
1

Ben Bu işleri

, ancak ikinci döngü içinde her zaman geçtikçe çok yavaş olacağını düşünüyorum onun mükemmel nedeniyle array_merge üzerinde array_splice tercih ederim sergilemiş sorunları, benim çözüm olacaktır:

<?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']; 

ve bu sonucudur: PHP 5 ile

[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

.Ben sonuç olarak istediğini düşünmek budur

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

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

: 3 Sen çıkan dizi gibi görünmelidir konum()

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

array_replace_recursive ile birleştirme bu tür yapabilirsiniz.

İlgili konular