PHP: объединить два массива, сохраняя ключи вместо переиндексации?
Как я могу объединить два массива (один с парами строк =>значений, а другой с парами значений int=>), сохраняя ключи string/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);
3 answers
Вы можете просто "добавить" массивы:
>> $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
, которые делают это и для подмассивов.