如何合并两个数组(一个是string => value对,另一个是int => value对),同时保留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);
6条答案
按热度按时间ldioqlga1#
你可以简单地“添加”数组:
yx2lnoni2#
考虑到你有
执行
$merge = $replacement + $replaced;
将输出:来自sum的第一个数组将在最终输出中具有值。
执行
$merge = $replaced + $replacement;
将输出:jk9hmnmh3#
我只是想添加另一种可能性,即在保持键的同时进行合并。
除了使用
+
符号向现有数组添加键/值之外,还可以执行array_replace
。结果将是:
相同的键将被后面的数组覆盖。
还有一个
array_replace_recursive
,它也可以用于子数组。Live example on 3v4l.org
gdx19jrr4#
通过**+**运算符,可以很容易地将两个数组相加或合并,而不需要改变它们的原始索引。这将是非常有帮助的laravel和codeigniter选择下拉列表。
输出将是:
3xiyfsfu5#
OP的要求是保留密钥(保持密钥),而不是重叠(我认为 * 覆盖 *)。在某些情况下,例如数字键,这是可能的,但如果是字符串键,则似乎不可能。
如果你使用
array_merge()
,数字键总是会重新索引或重新编号。如果你使用
array_replace()
,array_replace_recursive()
,它将从右到左重叠或覆盖。第一个数组中具有相同键的值将被第二个数组替换。如果你使用
$array1 + $array2
作为注解,如果键是相同的,那么它将保留第一个数组的值,但删除第二个数组。自定义函数。
下面是我的函数,我刚刚写的工作在相同的要求。您可以自由地用于任何目的。
测试。
结果。
bqujaahr6#
尝试使用array_replace_recursive或array_replace函数
http://php.net/manual/en/function.array-replace-recursive.php