2015-12-19 37 views
5

array_replace()array_merge()の違いを理解しようとしています。この投稿の後に質問が実際に私の心に来た:PHP array_merge empty values always less prioritar、問題は実際にこれらの2つの機能のいずれかで解決することができます。そこで、私はarray_mergeの代わりにarray_replaceを使用する必要があるかどうかを調べようとしていました。配列は数字キーが含まれている場合、後で値はarray_replace()で行われますarray_merge()で元の値を、上書きされませんPHPのarray_replaceとarray_mergeの相違点

  1. は、両方の機能のためのPHPのマニュアルを読んだ後、私はこれらの2つの違いを見つけます。

  2. array_merge()には、数字のキーを持つ入力配列の値が、結果配列の0から始まるインクリメントキーの番号が変更されます。rray_replace()では発生しません。

違いだけ数字キーに関連しているので、私たちは、安全に、我々は、連想配列を扱っているときarray_replace()array_merge()は全く等価な関数、と言うことができますか?それとも私が紛失している他の違いがありますか?

+0

あなたはそれを試してみて、あなたは何を試してみてください@zpr :) – zpr

+0

を取得するかを確認する必要がありますか?参照された質問と回答が表示される場合、このソリューションは両方の機能で動作します。しかし、私は、これらの2つの関数が連想配列に対して同じ結果を与えない他のケースがあるかどうかを知りたいだけです。 –

答えて

6

文字列キーを持つ配列の場合は、これは前述のとおりです。テンキーを使用している場合は、array_merge()は必要に応じて追加し、必要に応じて並べ替えます。array_replace()は元の値を上書きします。例えば

$a = array('a' => 'hello', 'b' => 'world'); 
$b = array('a' => 'person', 'b' => 'thing', 'c'=>'other', '15'=>'x'); 

print_r(array_merge($a, $b)); 
/*Array 
(
    [a] => person 
    [b] => thing 
    [c] => other 
    [0] => x 
)*/ 

print_r(array_replace($a, $b)); 
/*Array 
(
    [a] => person 
    [b] => thing 
    [c] => other 
    [15] => x 
)*/ 

あなたが見ることができるように、array_mergeは、アレイの再インデックス付き数字キーを持っており、それらの両方は、単に文字列キーを更新します。

array_merge()は、単にキーを気にせず、何も表示しないで削除しますが、array_replace()は名前が示すように、同様の(数値)インデックスのキーを置き換えます。

<?php 
$a = array('0'=>'a', '1'=>'c'); 
$b = array('0'=>'b'); 

print_r(array_merge($a, $b)); 
/*Array 
(
    [0] => a 
    [1] => c 
    [2] => b 
)*/ 

print_r(array_replace($a, $b)); 
/*Array 
(
    [0] => b 
    [1] => c 
)*/ 
+0

配列が数値キーを共有する場合、大きな違いがあることに注意してください。マージは元の内容を保持しますが、置換は破壊的です。 – tbernard

+0

@tbernardどういう意味ですか?どのように(キーだけでなく)内容に影響を与えますか? –

+1

@TareqMahmoodこれは私が言っていることです。与えられた$ a = {0 => 'hello'}と$ b = {0 => 'さようなら'} array_merge($ a、$ b)= {0 => 'hello'、1 => 'さようなら'} array_replace($ a、$ b)= {0 => 'さようなら'}。キーが数値でアソシエイティブでない場合、リプリケートで置き換えられます。2つの関数**のみ**は、両方の入力配列にはない連想キーまたはキーに対して同じように動作します。 – tbernard

0

Jarekは、ここで彼の記事での素敵な説明を与えた:

https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/

を彼はまた、比較のための配列を持つ+演算子を使用することで追加されます。

Graphic showing the difference

+0

リンクのみを回答として使用しないようにしてください。リンクが正常に機能しなくなった場合に備えて、重要な情報をリンク元からコピーしておくことをお勧めします – zajonc