16

PHPでは、(、およびが配列$a$b$cあるとすると)、機能的には$a = array_replace($b, $c)常に$a = $c + $b?と同じです。

そうでないことを示すエッジケースを見つけることができないようです。

1つの次元で作業するだけで、この質問は再帰とは関係ありません。つまり、array_replace_recursive() :)


編集:コメントの中に、ユニオン演算子が参照を保持することを示唆するメモを見つけましたが、それをarray_replace()怠ったことに気づいていません。

4

2 に答える 2

9

編集:ああ、申し訳ありませんが、引数が逆になっていることに気づきませんでした。結果の配列には常に2つの配列がマージ+されますが、最初の配列と2番目の配列の値が優先されるため、答えは「はい」array_replaceです。

唯一の実際の違いは、パフォーマンスの点です。重複が見つかった場合、値が置き換えられないため、パフォーマンスが望ましい場合があります+ それはただ先に進みます。さらに、(比較的高価な)関数呼び出しを必要としません。


いいえ。最初の値を考慮しarray_replaceながら、要素を置き換えます。+

<?php
print_r(array_replace([0 => 1], [0 => 2]));
print_r([0 => 1] + [0 => 2]);
配列
((
    [0] => 2
)。
配列
((
    [0] => 1
)。

マニュアルを引用するには:

+演算子は、左側の配列に追加された右側の配列を返します。両方の配列に存在するキーの場合、左側の配列の要素が使用され、右側の配列の一致する要素は無視されます。

参照に関しては、どちらの場合も保持されます。

于 2011-12-16T16:55:32.167 に答える
6

提供された配列に数値以外のキーがある場合、 array_mergeもarray_replaceと同じように機能することにも注意してください。

于 2012-03-04T18:42:16.597 に答える