SOFTELメモ

</> 技術者募集

【php】array_mergeと+演算子

問題

phpのarray_merge関数と+演算子って、配列を結合してくれるけど、ちょっと違いますよね?

php

答え

以下のような違いがあります。

配列の結合で添字が数字のみの場合、
array_mergeは常にゼロから始まる連続した数値に置き換わるが、
+演算子は維持する。

文字列として定義しても数値扱いになる。
でも0で始まる0でない場合だけは文字扱い。
(”0″ → 0、 “01” → “01”)

+演算子は、数字の添字を残したい時には都合がよさそうだけど、
あとに現れる重複するキーを上書きしない(無視する)。

以下のような結果になります。


$Faiz = array(
		"555" => "ファイズ",
		"913" => "カイザ",
		"333" => "デルタ"
);

$ParadiseLost = array(
		"315" => "サイガ",
		"000" => "オーガ"
);


var_export(array_merge($Faiz, $ParadiseLost));

Output:

array (
	0 => 'ファイズ',
	1 => 'カイザ',
	2 => 'デルタ',
	3 => 'サイガ',
	'000' => 'オーガ',
)



var_export($Faiz + $ParadiseLost);

Output:

array (
	555 => 'ファイズ',
	913 => 'カイザ',
	333 => 'デルタ',
	315 => 'サイガ',
	'000' => 'オーガ',
)

$Faiz = array(
		555 => "ファイズ",
		913 => "カイザ",
		333 => "デルタ",
		0 => "ライオトルーパー"
);

$ParadiseLost = array(
		315 => "サイガ",
		0 => "オーガ"
);


var_export(array_merge($Faiz, $ParadiseLost));

Output:

array (
	0 => 'ファイズ',
	1 => 'カイザ',
	2 => 'デルタ',
	3 => 'ライオトルーパー',
	4 => 'サイガ',
	5 => 'オーガ',
)



var_export($Faiz + $ParadiseLost);

Output:

array (
	555 => 'ファイズ',
	913 => 'カイザ',
	333 => 'デルタ',
	0 => 'ライオトルーパー',
	315 => 'サイガ',
)

関連するメモ

コメント