このような2つの配列があります。
array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);
array(
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);
これらの2つの配列を組み合わせて、重複を含まないようにし、元のキーを保持します。たとえば、出力は次のようになります。
array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);
私はこれを試しましたが、元のキーを変更しています:
$output = array_unique( array_merge( $array1 , $array2 ) );
解決策はありますか?
ただ使用する:
$output = array_merge($array1, $array2);
それで解決するはずです。 1つのキーが複数回発生する場合(例では'44'
など)、文字列キーを使用するため、1つのキーが同じ名前の処理中のキーを上書きします。あなたの場合、どちらも同じ値を持っているので、とにかく重要ではなく、重複も削除します。
更新:私は、PHPが数値文字列キーを数字(整数)として扱うので、このように振る舞う、つまり、キーの番号を付け直します...
回避策は、キーを再作成することです。
$output = array_combine($output, $output);
更新2:演算子もあることを常に忘れています(太字で、これは本当にあなたが探しているものです!D )
$output = $array1 + $array2;
このすべては、次の場所にあります。 http://php.net/manual/en/function.array-merge.php
$array1 + $array2 != $array2 + $array1
を考慮する必要があります
$array1 = array(
'11' => 'x1',
'22' => 'x1'
);
$array2 = array(
'22' => 'x2',
'33' => 'x2'
);
$ array1 +$ array2
$array1 + $array2 = array(
'11' => 'x1',
'22' => 'x1',
'33' => 'x2'
);
と$ array2+ $ array1
$array2 + $array1 = array(
'11' => 'x1',
'22' => 'x2',
'33' => 'x2'
);
これは動作します:
$output = $array1 + $array2;
これを行うには、一方をループしてもう一方に追加できます。
<?php
$test1 = array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);
$test2 = array(
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);
function combineWithKeys($array1, $array2)
{
foreach($array1 as $key=>$value) $array2[$key] = $value;
asort($array2);
return $array2;
}
print_r(combineWithKeys($test1, $test2));
?>
UPDATE:KingCrunchは ベストソリューション :print_r($array1+$array2);
を思いつきました
これは動作します:
$a = array(1 => 1, 2 => 2, 3 => 3);
$b = array(4 => 4, 5 => 5, 6 => 6);
$c = $a + $b;
print_r($c);
警告! $ array1 + $ array2はキーを上書きするため、(多次元配列の)私の解決策は array_unique() を使用することです
array_unique(array_merge($a, $b), SORT_REGULAR);
注意:
5.2.10 +
sort_flags
のデフォルト値をSORT_STRINGに戻しました。5.2.9デフォルトはSORT_REGULARです。
5.2.8-デフォルトはSORT_STRING
それは 完全に動作します 。それが同じに役立つことを願っています。
PHP 7.4以降を使用している場合、スプレッド演算子...
をPHPドキュメントの次の例として使用できます。
$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; //[1, 2, 3]
$arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
$arr4 = array(...$arr1, ...$arr2, 111); //[1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]
function getArr() {
return ['a', 'b'];
}
$arr6 = [...getArr(), 'c']; //['a', 'b', 'c']
$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; //['a', 'b', 'c']
function arrGen() {
for($i = 11; $i < 15; $i++) {
yield $i;
}
}
$arr8 = [...arrGen()]; //[11, 12, 13, 14]
JavaScript ES6のように機能します。
https://wiki.php.net/rfc/spread_operator_for_array の詳細を参照してください。
https://www.php.net/manual/en/function.array-merge.php
<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
?>