最新消息:点击查看大S的省钱秘笈

php: array_merge 函数引发的血案

编程相关 Slyar 888浏览 0评论

文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

今天处理一个事故的时候发现一个bug,某个程序员看来是没有弄懂array_merge,把它当成一般的数组合并来用了

先看两段代码:

结果: array(2) { ["slyar"]=> int(11111) ["com"]=> int(11111) }

这个feature很多程序员应该是知道的,如果有相同的string key那么后面的数组value会覆盖前面的,很好用的一个特性

结果: array(6) { [0]=> int(0) ["slyar"]=> int(1111) [1]=> int(5555) ["com"]=> int(9999) [2]=> int(2222) [3]=> int(3333) }

意不意外,惊不惊喜?这个就是今天bug的根源了,当key是纯数字的时候,array_merge会把key重新从0开始索引并改变key的值。。。于是那些以纯数字作为key的键值对就这么。。。消失了。。。

使用不熟悉的函数时一定要多读文档啊。。。

官方文档:

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

Merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array.

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.

PHP_is_the_best

图 by 西乔

转载请注明:Slyar Home » php: array_merge 函数引发的血案

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 纯数字当键的情况应该不多吧。还真要注意一下了。 有什么办法避免吗
    MR2个月前 (09-17)回复