PHP函数array_merge 慎用以及PHP合并数组+与array_merge的区别,关于php的array_merge函数。

jackxiang 2009-11-16 13:04 | |
+: 相同的数组键值以第一个为准,不会被覆盖。
PHP代码如下:

php arr.php  
Array
(
    [0] => 1
)

用array_merge后:
空数组合并也不报警告错:
可以用:$verBugsReturnArr = (array)json_decode($sucStrReturn2,True); 来代替:
$bugsReturnArr = array();这样的初始化。





php arr.php
Array
(
    [0] => 1
    [1] => 22
)


有一样的数组值,且键值一样的情况:

php arr.php
Array
(
    [0] => 1
    [1] => 1
)
于是,如果有相同,则需要去重,一般如下来使用:
$deAndOpratorArr = array_unique(array_merge($opratorArr,$de));//数组合并并去重
if(in_array($currentUser,$deAndOpratorArr))
{
       ......
}


转载:http://user.qzone.qq.com/165162897/blog/1258271003

在bbs的一个项目中,有的时候需要将一个查询的结果集,追加到另一个结果集的后面,使用了array_merge最加了数据,当数据量大的时候发现性能不是很好,像下面这个调用经常30秒没有返回。

$tplData = array_merge($tplData, $rows);

检查了下手册,说明如下。

  array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
可见,array_merge是用来合并两个数组的,他本身是要进行健名比较判断的,对健的查找肯定要消耗时间了。
而我之前用的array_merge仅仅是做追加用,不需要判断key是否重复。故略做改动,仅仅进行追加,性能提升很多。


PHP合并数组+与array_merge的区别:
PHP中两个数组合并可以使用+或者array_merge,但之间还是有区别的,而且这些区别如果了解不清楚项目中会要命的! 主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意 1)键名为数字时,array_merge()不会覆盖掉原来的值,但+
PHP中两个数组合并可以使用+或者array_merge,但之间还是有区别的,而且这些区别如果了解不清楚项目中会要命的!
主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意
1)键名为数字时,array_merge()不会覆盖掉原来的值,但+合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖)
2)键名为字符时,+仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉,但array_merge()此时会覆盖掉前面相同键名的值
需要注意的是数组键形式 '数字' 等价于 数字





————————————————————————————————————————————————————————
http://php.net/manual/en/function.array-merge.php
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.
————————————————————————————————————————————————————————
查看php的手册,array_merge函数的定义如下,(php有函数 可以在合并的时候保留?)合并数组的时候如何保留key?这样做就成有一个是字母就会把5和'5'保留下来:

---------- 调试PHP ----------
Array
(
    [0] => 5
    [1] => 1
    [2] => 33
    [3] => 4
    [k] => v
)

输出完成 (耗时 0 秒) - 正常终止
——————————这玩意用得小心—————————————————————————————————————
今天在使用时发现两个环境出现了不一致的情况:
$array1 = array();
$array2 = array("3337997418592025"=>"15043435569");

环境1:php:5.2.9   Linux 2.6.18
运行array_merge后结果数组为 array("3337997418592025"=>"15043435569");
环境2:php:5.2.14  linux版本不明
运行array_merge后结果数组为 array("15043435569");

结论:
2:64位系统与32位系统差异,导致“3337997418592025”分别解析为float?和正整数

来自:http://blog.sina.com.cn/s/blog_48f073080100syau.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2225/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2014-10-27 14:27
评论列表
2016-4-14 19:00 | 1 Email Homepage
grin
分页: 1/1 第一页 1 最后页
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]