Array_merge()が異なる値を持つ2つのキーを上書きするようにするにはどうすればよいですか?
たとえば、マージ:
[0] => 'whatever'
と
[0] => 'whatever', [1] => 'a', [2] => 'b'
生産すべき
[0] => 'whatever', [1] => 'a', [2] => 'b'
基本的に、array_mergeは、配列に文字列キーがある場合と同じように動作するようにします...
使用 +
演算子。
比較array_merge
から+
演算子:
<?php
$a1 = array(0=>"whatever",);
$a2 = array(0=>"whatever",1=>"a",2=>"b");
print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>
出力:
Array
(
[0] => whatever
[1] => whatever
[2] => a
[3] => b
)
Array
(
[0] => whatever
[1] => a
[2] => b
)
+
operator stillは、連想配列に数値キーが順不同の場合に機能します。
<?php
$a1 = array(0=>"whatever",);
$a2 = array(1=>"a",0=>"whatever",2=>"b");
print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>
出力:
Array
(
[0] => whatever
[1] => a
[2] => whatever
[3] => b
)
Array
(
[0] => whatever
[1] => a
[2] => b
)
通知array_merge
in this caseは、新しいキーを作成します。望ましくない...
array_replace
はまさにこれを行います。参照: http://php.net/manual/de/function.array-replace.php
手動で書くのはとても簡単です:
function array_merge_custom($first, $second) {
$result = array();
foreach($first as $key => $value) {
$result[$key] = $value;
}
foreach($second as $key => $value) {
$result[$key] = $value;
}
return $result;
}
更新:これは、この場合second配列が次の場合に勝つため、ユニオン演算子(return $first + $second;
)とは異なる動作をしますどちらも同じキーを持つ要素を持っています。
ただし、引数の場所を切り替えて、firstオペランドとして競合が発生した場合に「勝ちたい」配列を配置すると、次のことができます。同じ動作をします。したがって、上記の関数はreturn $second + $first;
とまったく同じように動作します。
私のプロジェクトでは、独自の関数を使用しています
function array_merge_custom(){
$array = [];
$arguments = func_num_args();
foreach($arguments as $args)
foreach($args as $key => $value)
$array[$key] = $value;
return $array;
}
使用法
$a = array_merge_custom($b, $c, $d, ... .. )
array_merge($a1,$a2);
で同じ結果を得るには、$a2+$a1
を使用する必要があります
$a1 = array(
'k1' => 1,
'k2' => 2,
'k3' => 3,
);
$a2 = array(
'k1' => 11,
'k2' => 22,
'k4' => 44,
);
コード:
print_r(array_merge($a1,$a2));
出力:
Array (
[k1] => 11
[k2] => 22
[k3] => 3
[k4] => 44
)
コード:
print_r($a1+$a2);
出力:
Array (
[k1] => 1
[k2] => 2
[k3] => 3
[k4] => 44
)
コード:
print_r($a2+$a1);
出力:
Array (
[k1] => 11
[k2] => 22
[k4] => 44
[k3] => 3
)
array_merge()
を使用してからarray_unique()
を使用できます。
the solution could be this:
function array_merge_custom($array1, $array2) {
$mergeArray = [];
$array1Keys = array_keys($array1);
$array2Keys = array_keys($array2);
$keys = array_merge($array1Keys, $array2Keys);
foreach ($keys as $key) {
$mergeArray[$key] = array_merge_recursive(isset($array1[$key]) ? $array1[$key] : [], isset($array2[$key]) ? $array2[$key] : []);
}
return $mergeArray;
}
$array1 = [
'66_' => [
'k1' => 1,
'k2' => 1,
],
'67_' => [
'k1' => 1,
'k2' => 1,
],
'68_' => [
'k1' => 1,
'k2' => 1,
],
68 => [
'k1' => 1,
'k2' => 1,
]
];
$array2 = [
'66_' => [
'a1' => 1,
'a2' => 1,
],
'68_' => [
'b1' => 1,
'b2' => 1,
],
68 => [
'b1' => 1,
'b2' => 1,
]
];
echo '<pre>';
print_r(array_merge_custom($array1, $array2));