web-dev-qa-db-ja.com

PHPで2つの配列を連結することはできません

最近、PHPで+演算子を使用して2つの配列を結合する方法を学びました。

しかし、このコードを検討してください...

_$array = array('Item 1');

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

var_dump($array);
_

出力は

array(1){[0] => string(6) "アイテム1"}

なぜこれが機能しないのですか?速記をスキップして$array = $array + array('Item 2')を使用しても機能しません。キーに何か関係がありますか?

53
alex

両方とも_0_のキーを持ち、配列を結合するその方法は重複を折りたたみます。代わりにarray_merge()を使用してみてください。

_$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);
_

配列の要素が異なるキーを使用している場合は、_+_演算子がより適切です。

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

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

編集:明確にするためにコードスニペットを追加しました

113
awgy

array_merge()を使用します
こちらのドキュメントをご覧ください。
http://php.net/manual/en/function.array-merge.php

1つまたは複数の配列の要素をマージして、1つの値が前の配列の最後に追加されるようにします。結果の配列を返します。

8

以前の回答はすべて間違っています! mergeは実際に配列をマージします。つまり、配列に共通の項目がある場合、コピーの1つは省略されます。 nionについても同様です。

この問題の「回避策」は見つかりませんでしたが、実際に手動で行うには...

ここに行く:

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

+はUnion演算子と呼ばれ、連結演算子とは異なります(PHPには配列用の演算子はありません)。 説明 明確に言う:

+演算子は、残りのキーの要素を右手配列から左手に追加しますが、重複キーは上書きされません。

例では:

$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"
}

両方の配列に0キーを持つエントリが1つあるため、結果が期待されます。

連結するには、 array_merge を使用します。

6
deceze

Array_mergeを試してください。

$array1 = array('Item 1');

$array2 = array('Item 2');

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

あなたはどちらにもキーを割り当てていないので、両方とも0のキーを持っているため、+はインデックスを再作成しないので、上書きしようとしています。

3
Rabbott
$array = array('Item 1');

array_Push($array,'Item 2');

または

$array[] = 'Item 2';
2
Brant Messenger

それは確かに重要な矛盾です。配列を連結する場合、重複キーは上書きされません。

代わりに array_merge() を使用する必要があります

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

これは、非連想配列に対して機能します。

while(($item = array_shift($array2)) !== null && array_Push($array1, $item));

0
Henry