2010-07-20 18 views
176

Dize/int tuşlarını tutarken iki diziyi (string => değer çiftleri ve diğeri int => değer çiftleriyle) nasıl birleştirebilirim? Hiçbiri hiçbir zaman üst üste gelmeyecektir (çünkü yalnızca dizeleri ve diğerinin yalnızca tam sayıları vardır).PHP: yeniden dizin yerine anahtarlar tutarken iki diziyi birleştirir?

// get all id vars by combining the static and dynamic 
$staticIdentifications = array(
Users::userID => "USERID", 
Users::username => "USERNAME" 
); 
// get the dynamic vars, formatted: varID => varName 
$companyVarIdentifications = CompanyVars::getIdentificationVarsFriendly($_SESSION['companyID']); 
// merge the static and dynamic vars (*** BUT KEEP THE INT INDICES ***) 
$idVars = array_merge($staticIdentifications, $companyVarIdentifications); 
+1

. Dize anahtarları aslında tamsayıların ifadelerini diziyor mu? – owenmarshall

+0

array_merge, ikinci dizimi yeniden dizine sokuyor. ie. dizi 'dizisini (123 =>" VALUE123 ")' dizisi (0 => "VALUE123") ' – Garrett

+0

hmm olarak değiştiriyor, bu ilginç. PHP dokümantasyonunun bu noktada biraz belirsiz olabileceğini düşünüyorum. Dizilerin * tümünün * sayısal tuşlara sahip olması durumunda ne olacağını söyler, ancak eğer yapmazlarsa ne olacağını özellikle belirtmez. –

cevap

419

Sadece 'ekle' olabilir diziler:

>> $a = array(1, 2, 3); 
array (
    0 => 1, 
    1 => 2, 
    2 => 3, 
) 
>> $b = array("a" => 1, "b" => 2, "c" => 3) 
array (
    'a' => 1, 
    'b' => 2, 
    'c' => 3, 
) 
>> $a + $b 
array (
    0 => 1, 
    1 => 2, 
    2 => 3, 
    'a' => 1, 
    'b' => 2, 
    'c' => 3, 
) 
İşte

(array_merge tamsayı tuşları ile yeniden indeksleme dizi olduğu için çalışmıyor) benim şimdiki kodudur
+34

WOW hiçbir şekilde! php ftw'de aşırı yükleme yapan operatör! teşekkürler =) – Garrett

+3

Bir çekicilik gibi çalıştım. –

+35

Bu konuya çok dikkat et! + Operatörü ek değildir, bir birliktir. Anahtarlar üst üste gelmezse, her şey iyidir, ama eğer yaparlarsa ... – GordonM

39

Eğer

$replaced = array('1' => 'value1', '4' => 'value4'); 
$replacement = array('4' => 'value2', '6' => 'value3'); 

$merge = $replacement + $replaced; irade çıkışı yapmak zorunda olduğunu düşünürsek:

Array('1' => 'value1', '4' => 'value2', '6' => 'value3'); 

Toplamdan ilk dizi, son çıktıda değerlere sahip olacaktır.

Doing $merge = $replaced + $replacement; çıktısı: PHP doc sayfasına göre, array_merge * * bunu yapmamalı: garip

Array('1' => 'value1', '4' => 'value4', '6' => 'value3'); 
+0

[[thumbsup]] 2 diziler eklerken bir –

+16

Özetle, bu, ikinci ilk kılma değerlerinden değerleri. – Dziamid

+0

İkincinin ilkini geçersiz kılacağını düşündüm. :) –

İlgili konular