【发布时间】:2016-09-04 12:24:16
【问题描述】:
我有以下数组:
$arrIni["ENV"]="US";
$arrIni["sap_db_server"] = "192.xxx.x.xx";
$arrIni["local_db_server"] = "localhost";
$arrIni["local_db_username"] = "root";
//Default settings
$arrIni["arrEnvSettings"]["UserTypeID"]=4;
$arrIni["arrEnvSettings"]["LocalizationID"]=1;
$arrIni["arrEnvSettings"]["LangLabels"] = array();
$arrIni["arrEnvSettings"]["pages"]["st1"]="st1.php";
$arrIni["arrEnvSettings"]["pages"]["st2"]="st2.php";
$arrIni["arrEnvSettings"]["pages"]["st3"]="st3.php";
我想和这个合并:
$setParam["arrEnvSettings"]["pages"]["st3"]="st3_V2.php";
这就是我正在做的:
echo "<pre>";
print_r(array_merge($arrIni,$setParam));
echo "</pre>";
这就是我得到的:
Array
(
[ENV] => US
[sap_db_server] => 192.xxx.x.xx
[local_db_server] => localhost
[local_db_username] => root
[arrEnvSettings] => Array
(
[pages] => Array
(
[st3] => st3_V2.php
)
)
)
在php doc about merge,这是评论" ...If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. ..."
所以通过这种方式,我想得到这个输出而不是最后一个:
Array
(
[ENV] => US
[sap_db_server] => 192.xxx.x.xx
[local_db_server] => localhost
[local_db_username] => root
[arrEnvSettings] => Array
(
[UserTypeID] => 4
[LocalizationID] => 1
[LangLabels] => Array
(
)
[pages] => Array
(
[st1] => st1.php
[st2] => st2.php
[st3] => st3_V2.php
)
)
)
我不明白为什么$setParam["arrEnvSettings"]["pages"]["st3"] 会覆盖整个$arrIni["arrEnvSettings"]。
注意:
如果我使用array_merge_recursive($arrIni,$setParam)),我会得到以下结果,但这不是我想要的。
Array
(
[ENV] => US
[sap_db_server] => 192.xxx.x.xx
[local_db_server] => localhost
[local_db_username] => root
[arrEnvSettings] => Array
(
[UserTypeID] => 4
[LocalizationID] => 1
[LangLabels] => Array
(
)
[pages] => Array
(
[st1] => st1.php
[st2] => st2.php
[st3] => Array
(
[0] => st3.php
[1] => st3_V2.php
)
)
)
)
没有iterate over the array 有没有办法做到这一点?只使用合并?我究竟做错了什么?
【问题讨论】:
-
合并前你得到了正确的数组,但是合并后你删除了 3 个值?
标签: php arrays merge array-merge