String/intキーを保持しながら、2つの配列(1つは文字列=>値のペア、もう1つはint =>値のペア)をマージするにはどうすればよいですか?それらのいずれも重複することはありません(一方には文字列のみがあり、他方には整数のみがあるため)。
ここに私の現在のコードがあります(array_mergeは整数キーで配列のインデックスを再作成しているため機能しません):
// get all id vars by combining the static and dynamic
$staticIdentifications = array(
Users::userID => "USERID",
Users::username => "USERNAME"
);
// get the dynamic vars, formatted: varID => varName
$companyVarIdentifications = CompanyVars::getIdentificationVarsFriendly($_SESSION['companyID']);
// merge the static and dynamic vars (*** BUT KEEP THE INT INDICES ***)
$idVars = array_merge($staticIdentifications, $companyVarIdentifications);
単純に配列を「追加」できます:
>> $a = array(1, 2, 3);
array (
0 => 1,
1 => 2,
2 => 3,
)
>> $b = array("a" => 1, "b" => 2, "c" => 3)
array (
'a' => 1,
'b' => 2,
'c' => 3,
)
>> $a + $b
array (
0 => 1,
1 => 2,
2 => 3,
'a' => 1,
'b' => 2,
'c' => 3,
)
あなたが持っていることを考える
$replaced = array('1' => 'value1', '4' => 'value4');
$replacement = array('4' => 'value2', '6' => 'value3');
$merge = $replacement + $replaced;
を実行すると、出力されます:
Array('1' => 'value1', '4' => 'value2', '6' => 'value3');
Sumの最初の配列には、最終出力の値が含まれます。
$merge = $replaced + $replacement;
を実行すると、出力されます:
Array('1' => 'value1', '4' => 'value4', '6' => 'value3');
この質問はかなり古いですが、キーを保持しながらマージを実行する別の可能性を追加したいだけです。
+
記号を使用して既存の配列にキー/値を追加する以外に、array_replace
を実行できます。
$a = array('foo' => 'bar', 'some' => 'string');
$b = array(42 => 'answer to the life and everything', 1337 => 'leet');
$merged = array_replace($a, $b);
同じキーは、後者の配列によって上書きされます。
サブアレイに対してもこれを行うarray_replace_recursive
もあります。
+演算子で元のインデックスを変更することなく、2つの配列を簡単に追加または結合できます。これは、laravelおよびcodeigniterの選択ドロップダウンで非常に役立ちます。
$empty_option = array(
''=>'Select Option'
);
$option_list = array(
1=>'Red',
2=>'White',
3=>'Green',
);
$arr_option = $empty_option + $option_list;
出力は次のようになります。
$arr_option = array(
''=>'Select Option'
1=>'Red',
2=>'White',
3=>'Green',
);
Array_replace_recursiveまたはarray_replace関数を試してください
$a = array('userID' => 1, 'username'=> 2);
array (
userID => 1,
username => 2
)
$b = array('userID' => 1, 'companyID' => 3);
array (
'userID' => 1,
'companyID' => 3
)
$c = array_replace_recursive($a,$b);
array (
userID => 1,
username => 2,
companyID => 3
)
http://php.net/manual/en/function.array-replace-recursive.php