Nasıl PHP diziler birleştirebilirsiniz?

7 Cevap php

I (örneğin) hayvan iki dizi vardır.

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

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

Nasıl kimliği tarafından içine iki dizileri birleştirebilirsiniz?

7 Cevap

Bu Erik (id yok. Dizisi tuşu gibi) önerilen ne yapar ve $results için $array2 olarak vlaues 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'];
    }
}

@ Andy

http://se.php.net/array_merge

Bu benim ilk düşünce oldu ama oldukça iş değil - ancak array_merge_recursive işe yarayabilecek - hemen kontrol etmek için çok tembel.

Öncelikle, neden (php diziler imo olduğu haritalama tarzı dizide, veya anahtarın) endeksi olarak kimliğini kullanmak değil mi?

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

bundan sonra diğer öğeler üzerinde array_merge performans, bir dizi yoluyla foreach gerekir:

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

En azından böyle bir şey. Belki daha iyi bir çözüm var?

    <?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);
?>

çıkışlar:

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

            [0] => 4
        )

    [c] => 3
)

@Andy

Ben zaten baktım ve çok boyutlu diziler birleştirme nasıl yardım görmedim. Belki bir örnek verebilir.

@kevin

That is probably what I will need to do as I think the code below will be very slow. The actual code is a bit different because I'm using ADOdb (and ODBC for the other query) but I'll make it work and post my own answer.

Bu eserler, ancak ben ikinci döngü boyunca her zaman geçtikçe çok yavaş olacağını düşünüyorum:

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

ve bu sonuç:

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

    [2] => Array
        (
            [name] => Mouse
            [age] => 321
        )

PHP 5.3 ile bu array_replace_recursive ile birleştirme çeşit () yapabilirsiniz

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

Siz çıkan dizi gibi görünmelidir konum:

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

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

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