Array_merge 与 +

发布于 2024-11-29 16:21:59 字数 147 浏览 1 评论 0原文

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

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

我不明白这是如何工作的,有人能给我解释一下吗?

When I use array_merge() with associative arrays I get what I want, but when I use them with numerical key arrays the keys get changed.

With + the keys are preserved but it doesn't work with associative arrays.

I don't understand how this works, can anybody explain it to me?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

离线来电— 2024-12-06 16:21:59

由于两个数组都是数字索引的,因此仅使用第一个数组中的值。

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

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

array_merge( ) 的行为略有不同:

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

Because both arrays are numerically-indexed, only the values in the first array will be used.

The + operator returns the right-hand array appended to the left-hand array; for keys that exist in both arrays, the elements from the left-hand array will be used, and the matching elements from the right-hand array will be ignored.

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

array_merge() has slightly different behavior:

If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended. Values in the input array with numeric keys will be renumbered with incrementing keys starting from zero in the result array.

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

赢得她心 2024-12-06 16:21:59

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

数组加

<块引用>

  1. 数组加运算将所有数组视为关联数组。
  2. 加号时按键冲突时,保留左(前一个)值
  3. null + array() 将引发致命错误

数组合并()

<块引用>

  1. array_merge() 对于索引数组和关联数组的工作方式不同。
  2. 如果两个参数都是索引数组,则 array_merge() 连接索引数组值。
  3. 如果不是,索引数组将转换为值数组,然后转换为关联数组。
  4. 现在它得到了两个 assoc 数组并将它们合并在一起,当键冲突时,将保留右(最后)值。
  5. array_merge(null, array()) 返回 array() 并收到警告,参数 #1 不是数组。

我发布下面的代码以使事情变得清楚。

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;
}

These two operation are totally different.

array plus

  1. Array plus operation treats all array as assoc array.
  2. When key conflict during plus, left(previous) value will be kept
  3. null + array() will raise fatal error

array_merge()

  1. array_merge() works different with index-array and assoc-array.
  2. If both parameters are index-array, array_merge() concat index-array values.
  3. If not, the index-array will to convert to values array, and then convert to assoc array.
  4. Now it got two assoc array and merge them together, when key conflict, right(last) value will be kept.
  5. array_merge(null, array()) returns array() and got a warning said, parameter #1 is not an array.

I post the code below to make things clear.

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文