当我将array_merge()
与关联数组一起使用时,我得到了我想要的东西,但是当我将它们与数字键数组一起使用时,键发生了变化。
使用+
时,键被保留,但它不适用于关联数组。
我不明白这是怎么回事,有人能给我解释一下吗?
发布于 2011-08-15 05:09:02
因为两个数组都是数字索引的,所以只使用第一个数组中的值。
+运算符返回追加到左侧数组的右侧数组;对于同时存在于两个数组中的键,将使用左侧数组中的元素,而忽略右侧数组中匹配的元素。
http://php.net/manual/en/language.operators.array.php
array_merge()
的行为略有不同:
如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个值。但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会被追加。具有数值键的输入数组中的值将使用结果数组中从零开始的递增键重新编号。
发布于 2014-12-31 15:33:59
这两种操作是完全不同的。
阵列plus
null + array()
将引发致命错误array_merge()
为了让事情变得清晰,我发布了下面的代码。
function array_plus($a, $b){
$results = array();
foreach($a as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
foreach($b as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
return $results;
}
//----------------------------------------------------------------
function is_index($a){
$keys = array_keys($a);
foreach($keys as $key) {
$i = intval($key);
if("$key"!="$i") return false;
}
return true;
}
function array_merge($a, $b){
if(is_index($a)) $a = array_values($a);
if(is_index($b)) $b = array_values($b);
$results = array();
if(is_index($a) and is_index($b)){
foreach($a as $v) $results[] = $v;
foreach($b as $v) $results[] = $v;
}
else{
foreach($a as $k=>$v) $results[$k] = $v;
foreach($b as $k=>$v) $results[$k] = $v;
}
return $results;
}
https://stackoverflow.com/questions/7059721
复制相似问题