【问题标题】:array_replace() vs. union operator in PHParray_replace() 与 PHP 中的联合运算符
【发布时间】:2011-12-16 16:48:59
【问题描述】:

在 PHP 中,(鉴于 $a$b$c 是数组$a = array_replace($b, $c) 在功能上总是与 $a = $c + $b 相同?

我似乎找不到任何可以表明其他情况的极端情况。

只处理一维,这个问题与递归无关,即:array_replace_recursive()


编辑:我在评论中发现了一条注释,表明联合运算符将保留引用,但我没有注意到 array_replace() 没有这样做。

【问题讨论】:

    标签: php arrays merging-data


    【解决方案1】:

    编辑:抱歉,我没有注意到论点被颠倒了。答案是肯定的,因为结果数组总是将两个数组合并,但是 + 优先考虑第一个数组中的值,array_replace 优先考虑第二个数组。

    唯一的实际区别在于性能方面,+可能更可取,因为当它找到重复项时,它不会替换该值;它只是继续前进。另外,它不需要(相对昂贵的)函数调用。


    没有。 array_replace 替换元素,而 + 考虑第一个值:

    <?php
    print_r(array_replace([0 => 1], [0 => 2]));
    print_r([0 => 1] + [0 => 2]);
    
    大批 ( [0] => 2 ) 大批 ( [0] => 1 )

    cite手册:

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

    至于引用,它们在两种情况下都会保留。

    【讨论】:

    • 看! PHP 5.4 中新的速记数组语法!
    • 壮观,感谢@Artefacto——我认为它们是,尽管我担心一些未记录的边缘情况(我注意到 PHP 有点臭名昭著)跨度>
    • 我找到了一张漂亮的图片和描述说明了完全不同的地方:softonsofa.com/…
    【解决方案2】:

    还应该提到,如果提供的数组具有非数字键,array_merge 的功能也与 array_replace 相同。

    【讨论】:

    • 这更多的是评论而不是问题的答案:)
    猜你喜欢
    • 2023-02-24
    • 2011-05-07
    • 2013-03-17
    • 1970-01-01
    • 2018-06-08
    • 2017-08-30
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    相关资源
    最近更新 更多