0

2つの配列をマージするためにarray_merge関数を使用します。ほとんどの場合、正しく機能します

$x = array_merge(array('a' => 'x', 'b' => 'x'), array('b' => 'y', 'c' => 'y'));
var_dump($x);

// array(3) { ["a"]=> string(1) "x" ["b"]=> string(1) "y" ["c"]=> string(1) "y" }

ただし、数値の場合は予期しない結果が返されます

$x = array_merge(array('1' => 'x', '2' => 'x'), array('2' => 'y', '3' => 'y'));
var_dump($x);

// array(4) { [0]=> string(1) "x" [1]=> string(1) "x" [2]=> string(1) "y" [3]=> string(1) "y" }

インデックスの番号の付け直しを防ぐ方法は?数値インデックスの番号を付け直さずに、ベースphp関数で2つの配列をマージする方法はありますか?

4

3 に答える 3

1

あなたはそのために使うことができますarray_replace()

$x = array_replace(array('1' => 'x', '2' => 'x'), array('2' => 'y', '3' => 'y'));
var_dump($x);

出力:

array(3) {
  [1]=>
  string(1) "x"
  [2]=>
  string(1) "y"
  [3]=>
  string(1) "y"
}
于 2012-12-28T13:29:00.943 に答える
1

最初の配列の要素を上書きせず、インデックスを再作成せずに、2 番目の配列の配列要素を最初の配列に追加する場合は、+ 配列結合演算子を使用します。

<?php
$array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a');
$array2 = array(1 => 'one_b', 3 => 'three_b', 4 => 'four_b');
$result = $array1 + $array2;
var_dump($result);
?>

最初の配列のキーは保持されます。配列キーが両方の配列に存在する場合、最初の配列の要素が使用され、2 番目の配列の一致するキーの要素は無視されます。

array(5) {
 [0]=>
 string(6) "zero_a"
 [2]=>
 string(5) "two_a"
 [3]=>
 string(7) "three_a"
 [1]=>
 string(5) "one_b"
 [4]=>
 string(6) "four_b"
}

ここから撮影

于 2012-12-28T13:24:45.167 に答える
1

マニュアルから:

入力配列に同じ文字列キーがある場合、そのキーの後の値が前の値を上書きします。ただし、配列に数値キーが含まれている場合、後の値は元の値を上書きせずに追加されます。

そのため、代わりにarray_replaceを使用してください。

于 2012-12-28T13:28:28.457 に答える