首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Array_merge与+

Array_merge与+
EN

Stack Overflow用户
提问于 2011-08-15 05:06:52
回答 2查看 50.7K关注 0票数 127

当我将array_merge()与关联数组一起使用时,我得到了我想要的东西,但是当我将它们与数字键数组一起使用时,键发生了变化。

使用+时,键被保留,但它不适用于关联数组。

我不明白这是怎么回事,有人能给我解释一下吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-15 05:09:02

因为两个数组都是数字索引的,所以只使用第一个数组中的值。

+运算符返回追加到左侧数组的右侧数组;对于同时存在于两个数组中的键,将使用左侧数组中的元素,而忽略右侧数组中匹配的元素。

http://php.net/manual/en/language.operators.array.php

array_merge()的行为略有不同:

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个值。但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会被追加。具有数值键的输入数组中的值将使用结果数组中从零开始的递增键重新编号。

http://php.net/manual/en/function.array-merge.php

票数 170
EN

Stack Overflow用户

发布于 2014-12-31 15:33:59

这两种操作是完全不同的。

阵列plus

  1. 数组加操作将所有数组视为assoc数组。当加法过程中键冲突时,左(上)值将为kept
  2. null + array()将引发致命错误

array_merge()

  1. array_merge()与索引数组和assoc-array.
  2. If的工作方式不同,这两个参数都是索引数组,array_merge()连接索引数组的值。如果不是,索引数组将转换为值数组,然后转换为assoc数组。
  3. 现在它得到两个assoc数组并将它们合并在一起,当键冲突时,右边(最后)值将返回array_merge()并得到警告,说明参数#1不是数组。

为了让事情变得清晰,我发布了下面的代码。

代码语言:javascript
复制
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;
}
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7059721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档