PHP: dizilerini ekleme birlikte

6 Cevap php

Birisi bana bu açıklamaya yardımcı olabilir mi? Beklediğim gibi bir çalışan, iki kod parçacıkları var, ama diğer değildir.

This works

$a = array('a' => 1, 'b' => 2);
$b = array('c' => 3);
$c = $a + $b;
print_r($c);

// Output
Array
(
    [a] => 1
    [b] => 2
    [c] => 3
)

This does not

$a = array('a', 'b');
$b = array('c');
$c = $a + $b;
print_r($c);

// Output
Array
(
    [0] => a
    [1] => b
)

Burada neler oluyor? Neden ikinci versiyonu de birlikte iki dizileri eklemek değildir? Ben ne yanlış var? Bunun yerine ne yapmalıdır? Ya da PHP bir hata?

6 Cevap

Bu belgelenmiş ve doğru olduğunu: http://us3.php.net/manual/en/language.operators.array.php

Çoğaltılamaz tuşları üzerine DEĞİLDİR ise + operatörü, teslim sola sağ elini diziden kalan tuşları öğeleri ekler.

Bu yüzden php bir hata değil sanırım ve ne ne olduğunu varsayalım. Ben de daha önce bu fark etmemişti.

Eğer $ a ve $ b hem print_r eğer çünkü kısa olması, bu işleri:

Array
(
    [a] => 1
    [b] => 2
)

ve

Array
(
    [c] => 3
)

Gördüğünüz gibi tüm elemanlar farklı tuşları var ...

as for the second example arrays, if you print $a ve $b you have:

Array
(
    [0] => a
    [1] => b
)

ve

Array
(
    [0] => c
)

ve that 0 key for both 'a' ve 'c' is the issue here, the elements of second array with same keys are discarded... if you do:

$c = $b + $a; // instead of $c = $a + $b;

sonucu olacaktır:

Array
(
    [0] => c
    [1] => b
)

Bu sadece belgelenmemiş davranış olduğunu düşünüyorum, ama ben bu konuda muhtemelen yanılıyorumdur. Her iki şekilde de, kullanmak, böyle diziler bir araya getirmek için çalışıyoruz array_merge

Bkz: http://ca2.php.net/manual/en/function.array-merge.php

Diziler üzerinde çalışırken, artı operatör dizinleri yazmaz, ne de dizileri reindex gelmez. Sizin örnekte c gibi a indeksi 0, bu nedenle atılır oluyor. Array_merge kullanın.

array_splice($a,count($a),0,$b); //array $a becomes a group of $a and $b arrays.

P.S. bu dizine diziler için var (çağrışım değil)