PHP iki diziyi birleştirme

6 Cevap php

Ben iki akım diziler yeni bir dizi oluşturmak için çalışıyorum. Array_merge çalıştı, ama bana istediğimi vermeyecektir. $array1 Ben bir işleve geçmek anahtarlarının bir listesi. $array2 bu işlevi sonuçlarını tutar, ama şifreler için mevcut olmayan herhangi bir grubuyla kıyaslandığında içermez. Yani, istenen tüm tuşlar 'null' ile çıkıyor emin olmak istiyorum: ed değerleri gösterilir $result diziye göre gibi.

Bu gibi küçük bir şey gider:

$array1 = array('item1', 'item2', 'item3', 'item4');

$array2 = array(
    'item1' => 'value1',
    'item2' => 'value2',
    'item3' => 'value3'
);

İşte istediğim sonuç:

$result = array(
    'item1' => 'value1',
    'item2' => 'value2',
    'item3' => 'value3',
    'item4' => ''  
);

Bu şekilde yapılabilir, ama ben bunun iyi bir çözüm olduğunu sanmıyorum - Ben gerçekten kolay yol almak ve ekleyerek PHP hatalarını bastırmak için sevmiyorum @: s kod. 'item4' örneğine dayanarak, $array2 değil çünkü bu örnek tabii ki hataları atmak olacaktır.

foreach ($keys as $k => $v){
    @$array[$v] = $items[$v]; 
}

Yani, aynı sonuca ulaşmak için en hızlı (performans-bilge) yolu nedir?

6 Cevap

array_fill_keys size kullanabileceğiniz güzel bir dizi inşa edecek array_merge:

array_merge(array_fill_keys($array1, ''), $array2);

: Yerine array_merge Veya, bir sendikaya gerçekleştirir + op kullanabilirsiniz

$array2 + array_fill_keys($array1, '');

Bu bir sayısal tuşlara ya da karışık sayısal / dizeleri ile çalışır :)

Yerine atma hataları kontrol etmenizi array_key_exists kullanarak anahtar çıkar

<?php
 foreach($array1 as $key) {
    if (array_key_exists($key, $array2)) {
        $result[$key] = $array2[$key];
    } else {
        $result[$key] = null;
    }
 }

Bu durumda array_merge kullanın ve array_fill_keys yapabilirsiniz:

$result = array_merge(
    array_array_fill_keys($array1,''),
    $array2
);

$ Dizi1 sayısal değerler içeriyorsa, ikinci dizideki array_merge değeri ile anahtarları sayılar değil sadece eğer ilk olanları üzerine ve, bu nedenle, bu yöntem işe yaramaz farkında olmalıdır. Giriş aşağıdaki değerleri ile Örneğin, bu kod düzgün çalışmaz:

$array1 = array(1,2,3);
$array2 = array("hi"=>"world",2=>"test","other"=>"empty");

Aşağıdaki üretecektir:

array(6) {
  [0]=>
  string(0) ""
  [1]=>
  string(0) ""
  [2]=>
  string(0) ""
  ["hi"]=>
  string(5) "world"
  [3]=>
  string(4) "test"
  ["other"]=>
  string(5) "empty"

}

Eğer dizi anahtarları tümü değişmezdir emin iseniz endişeleri olmaksızın kullanabilirsiniz

Bu işe olmaz durumlarda, array_fill_keys veya döndürür bir dizi türü döndüren benzer bir işlevi kullanarak değiliz gibi, siz diziye çevirebilirsiniz.

$array1 = (array)$array2 + (array)$array1;

Eğer array_combine baktınız mı? İşte link: PHP reference

Bu bir uyarı ile, tam olarak ne istediğinizi yapmak gibi görünüyor: İki diziler eşit büyüklükte değilse, hiçbir şey yapmaz. Bu tuşları diziniz her zaman değerler sizin dizi daha uzun olacağını garanti ederseniz, hem diziler Array_combine çağırmadan önce eşit büyüklükte sadece ped null değerleri ile değerler dizisi vardır yapana kadar.