0

ユニオン演算子で実験を行っている次の配列があります。

$a = array(1,2,3,6);

$b = array(1, 2, 3, 4, 5);

$c =  $b + $a;

$cは1,2,3,4,5のようです

したがって、配列$bは配列$aに対してチェックされると仮定します。6は$bに存在しないため、追加されません。

ここで、それを$ c = $ a + $ bに切り替えるとすると、(1,2,3,6)のみが期待されます。

ただし、実際の出力は(1,2,3,6,5)です。

誰かがこれを説明できますか?

4

4 に答える 4

2

+配列を追加するために使用します。プロセスは値ではなくキーによってチェックされます。

array_mergeとは異なり、 を使用する+と、2 番目の配列の値は最初の配列の値を同じキーで上書きしません。

したがって$b + $a、 の値は$b上書きされないため、結果は のままですarray(1, 2, 3, 4, 5)

の場合$a + $b、 は1,2,3,6予約され、追加の値が追加さ6れるため、結果は になりますarray(1,2,3,6,5)

于 2012-10-07T05:26:08.423 に答える
2

+operatorが でどのように動作するかを誤解していると思いますarray+が使用される場合array、基本的に2つの配列を結合しkeysませんvalues

例えば。$c予想と異なる結果が得られた理由を説明します。

# $a = array(1,2,3,6);
$a = array(
  0 => 1,
  1 => 2,
  2 => 3,
  3 => 6
);
# $b = array(1, 2, 3, 4, 5);
$b = array(
  0 => 1, 
  1 => 2, 
  2 => 3, 
  3 => 4, 
  4 => 5
);

// the + operator simply do this
$c[0] = $a[0] + $b[0]; // yield 1
...
...
$c[3] = $a[3] + $b[3]; // yield 6

$c; // yield array(1,2,3,6,5)
于 2012-10-07T05:32:14.297 に答える
1

は最も+左の変数を取り、そのすべての値を最初に使用します。すべての値が使い果たされたが、左側のエントリの数が右側のエントリより少ない場合、残りの値は右側の値で埋められます。

$foo = array("foo");
$boo = array(true, "bar");

$foobar = $foo + $boo;

最初に、に$foobar含まれるもので埋められますが$foo、の長さ$booがよりも大きいため$foo、省略された場所にの値$foobarが入力されます。したがって、最初の値はすでに使用されているため無視されますが、2番目の値は使用されていないため、マージされます。$boo$foo$foo

この概念は、配列のキーが定義されている場合にも適用されます(つまり、$arr[]ではなく$arr['location'])。右のキーは左のキーを上書きしません。

于 2012-10-07T05:08:40.963 に答える
0

$c = $a + $bを説明する最も簡単な方法。

$cは最初に (第 1 オペランド) $aの「キーと値のペア」を取ります。

(第 2 オペランド) $bが $a よりも多くのキーと値のペア」を持っている場合..

$cは、余分な$b を配列の末尾に追加します。

それ以外の場合、$cは$ aと同等のままです。

$a =   
  0 => 2,
  1 => 5,
  2 => 8,

$b =   
  0 => 9,
  1 => 2,
  2 => 1,
  3 => 5,
  4 => 6,

$c =   
  0 => 2,
  1 => 5,
  2 => 8,
  3 => 5,  //From $b
  4 => 6,  //From $b
于 2014-06-08T14:22:55.330 に答える