PHP 2 diziler birleştirmek olamaz

8 Cevap php

Geçenlerde PHP + operatörü ile 2 diziler katılmak için nasıl öğrendim.

Ama bu kodu düşünün ...

$array = array('Item 1');

$array += array('Item 2');

var_dump($array);

Çıkış

array(1) { [0]=> string(6) "Item 1" }

Bu neden çalışmıyor? Steno atlama ve kullanma $array = $array + array('Item 2') ya da çalışmıyor. Bu tuşları ile bir ilgisi var mı?

8 Cevap

Her iki 0 bir anahtar olacak ve diziler birleştirerek bu yöntem çiftleri çökecek. Bunun yerine, array_merge() kullanmayı deneyin.

$arr1 = array('foo'); // Same as array(0 => 'foo')
$arr2 = array('bar'); // Same as array(0 => 'bar')

// Will contain array('foo', 'bar');
$combined = array_merge($arr1, $arr2);

Sizin dizideki elemanları farklı tuşları kullanıldığında, + operatörü daha uygun olurdu.

$arr1 = array('one' => 'foo');
$arr2 = array('two' => 'bar');

// Will contain array('one' => 'foo', 'two' => 'bar');
$combined = $arr1 + $arr2;

Düzenleme: açıklığa kavuşturmak için bir kod parçacığını eklendi

Use array_merge()
See the documentation here:
http://php.net/manual/en/function.array-merge.php

Birinin değerleri bir önceki sonuna eklenir, böylece bir veya daha fazla dizilerin elemanlarını birleştirir. Bu çıkan dizi döndürür.

Array_merge deneyin.

$array1 = array('Item 1');

$array2 = array('Item 2');

$array3 = array_merge($array1, $array2);

Ya bir tuşa atama değildir, çünkü ben onun düşünüyorum, bu yüzden ikisi de 0 anahtarı var ve + yeniden endekslemek değildir, bu yüzden onun üzerine yazmaya çalışıyorum.

$array = array('Item 1');

array_push($array,'Item 2');

veya

$array[] = 'Item 2';

+ Bir Birleştirme operatörü (PHP diziler için bir yok) farklıdır Union operatörü denir. description açıkça diyor ki:

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

Örnek:

$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b;

array(3) {
  ["a"]=>
  string(5) "apple"
  ["b"]=>
  string(6) "banana"
  ["c"]=>
  string(6) "cherry"
}

Hem diziler tuşu 0 ile bir giriş olduğundan, sonuç bekleniyor.

, Birleştirmek kullanmak için array_merge .

Bu gerçekten önemli bir çatışmadır. Dizileri birleştirerek zaman yinelenen anahtarlar yazılmaz.

Bunun yerine array_merge() kullanmanız gerekir

$array = array_merge(array('Item 1'), array('Item 2'));

All previous answers are incorrect! merge actually merges the arrays, meaning, if the arrays have a common item one of the copies will be omitted. Same goes for union.

Ben bir "iş çevresinde" bu sorunu bulamadık, ama aslında elle bunu yapmak için ...

buraya gidiyor:

<?php
$part1 = array(1,2,3);
echo "array 1 = \n";
print_r($part1);
$part2 = array(4,5,6);
echo "array 2 = \n";
print_r($part2);
$ans = NULL;
for ($i = 0; $i < count($part1); $i++) {
    $ans[] = $part1[$i];
}
for ($i = 0; $i < count($part2); $i++) {
    $ans[] = $part2[$i];
}
echo "after arrays concatenation:\n";
print_r($ans);
?>

Diyerek deneyin

$array[] = array('Item 2'); 

Eğer, bir diziye bir dizi eklemek için çalışıyorum böylece $array[][] ama bu başlık da anlaşılacağı gibi değil konum gibi görünüyor olsa da.