array_merge和array的区别分析

记得之前发现很多朋友用过array+array的方式,今天索性再聊下这样的话题:如何获取字符键名相同值不同的两个数组值集合?让我认真比较了下PHP中array_merge和array相加的区别

首先来看看键名是string,两者区别:

<?php
$arr1 = array(‘a‘=>‘PHP‘);
$arr2 = array(‘a‘=>‘PYTHON‘);
print_r(array_merge($arr1,$arr2)); //Array ( [a] => PYTHON ) 如果键名为字符,且键名相同,array_merge()后面数组元素值会覆盖前面数组元素值
print_r($arr1+$arr2); //Array ( [a] => PHP )如果键名为字符,且键名相同,数组相加会将最先出现的值作为结果
//再比如
$arr1 = array(‘a‘=>‘1‘,‘b‘=>‘2‘);$arr2 = array(‘a‘=>‘1‘,‘b‘=>‘3‘,‘c‘=>‘2‘);$ret = array_merge($arr1,$arr2);print_r($ret);//Array ( [a] => 1 [b] => 3 [c] => 2 )
$ret = $arr1+$arr2;print_r($ret);//Array ( [a] => 1 [b] => 2 [c] => 2 )

如果键名是数字,两者区别:

<?php
$arr1 = array("JAVA","PHP");
$arr2 = array("PYTHON","PHP");
print_r(array_merge($arr1,$arr2));//Array ( [0] => JAVA [1] => PHP [2] => PYTHON [3] => PHP ) 如果键名为数字,array_merge()不会进行覆盖
print_r($arr1+$arr2);//Array ( [0] => JAVA [1] => PHP )如果键名为数字,数组相加会将最先出现的值作为结果,后面键名相同的会被抛弃

//再比如
$arr1 = array(1=>‘1‘,2=>‘2‘);$arr2 = array(1=>‘1‘,2=>‘3‘,8=>‘2‘);

$ret = array_merge($arr1,$arr2);print_r($ret);//Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 3 [4] => 2 ) 如果数组中的键名为数字时,会格式化键名并保留所有键值。

//再比如
$arr1 = array(1,2);$arr2 = array(1,2,8);

$ret = array_merge($arr1,$arr2);print_r($ret);//Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 2 [4] => 8 )
?>

特别要注意。关于“array_merge和数组相加的区别”上面已经阐述的很清楚了,回到我最初的问题“如何最有效的获取字符键名相同值不同的两个数组值集合呢”,不会这要对每个数组遍历吧,PHP中还有一个函数:array_merge_recursive

— 递归地合并一个或多个数组,如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去。如下例:

<?php
$arr1 = array("a"=>"PHP","C");
$arr2 = array("a"=>"JAVA","C","PYTHON");
print_r(array_merge_recursive($arr1, $arr2)); //Array ( [a] => Array ( [0] => PHP [1] => JAVA ) [0] => C [1] => C [2] => PYTHON )
?>

原文地址:https://www.cnblogs.com/phpper/p/9144125.html

时间: 2024-10-15 06:29:47

array_merge和array的区别分析的相关文章

PHP中array_merge和array相加的区别分析

今天处理一个这样的问题:如何获取字符键名相同值不同的两个数组值集合,用array_merge和数组相加都不可行,让我认真比较了下PHP中array_merge和array相加的区别 首先来看看键名是string,两者区别: 复制代码代码如下: <?php$arr1 = array('a'=>'PHP');$arr2 = array('a'=>'JAVA');//如果键名为字符,且键名相同,array_merge()后面数组元素值会覆盖前面数组元素值print_r(array_merge(

php 通过array_merge()和array+array合并数组的区别和效率比较

众所周知合并两个数组可以使用array_merge(),这是php提供的一个函数.另外还可以通过 array 的方式来合并数组,这两种直接有什么区别,哪一个的效率更高呢? array_merge() 格式: array array_merge ( array - ] ) 注意(区别): 如果合并的数组使用关联索引,数组中有相同的键名,则该键名后面的值将覆盖前一个值. 如果合并的数组使用数字索引,数组中有相同的键名, 后面的值将不会覆盖原来的值,而是附加到后面. 如果只给了一个数组并且该数组是数字

PHP教程:PHP中单引号与双引号的区别分析

PHP教程:PHP中单引号与双引号的区别分析 在PHP中,我们可以使用单引号或者双引号来表示字符串.不过我们作为开发者,应该了解其中的区别.单引号与双引号对于定义字符一个是可以解析变量一个是会把变量直接输出来,同时单引号与双引号在字符处理上单引号要优与双引号 ①转义的字符不同 单引号和双引号中都可以使用转义字符(\),但只能转义在单引号中引起来的单引号和转义转义符本身.如果用双引号("")括起字符串,PHP懂得更多特殊字符串的转义序列. 1 ②对变量的解析不同 单引号字符串中出现的变量

jQuery中的bind() live() delegate()之间区别分析

jQuery中的bind() live() delegate()之间区别分析 首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图 1.bind方式 $('a').bind('click',function (){ alert('click'); }) 解析:这种方式最简单,jq扫描文档找出所有的a,让将函数绑定到每个元素的click事件上 2.live方式 $('a').live('click',function (){ alert('click'); }) 解析:jq将函数绑定到$

var a=[]; 和 var a=new Array(); 的区别,为什么前者效率高

因为 JSON格式的语法是引擎直接解释的.而new Array 则需要调用Array的构造器.还有就是1.当你需要将一个数字转化为字符串时可以这样定义:var s=""+1; 这样的转化最快.2.当你定义一个对象类型时:var o={}; 而已 var o=new Object();道理是同样,new Object()需要调用Object的构造器.3.在js中执行字符串替换时,或查找字符串,需要进行循环时,可以考虑使用正则,速度更快.4.尽可能的少定义.使用全局变量var a=[];

jquery中attr和prop的区别分析

这篇文章主要介绍了jquery中attr和prop的区别分析的相关资料,需要的朋友可以参考下 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很多.这里谈谈我的心得,我的心得很简单: • 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. • 对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. 上面的描述也许有点模糊,举几个例子就知道了. 复制代码代

C# Parse和Convert的区别分析

原文:C# Parse和Convert的区别分析 大家都知道在进行类型转换的时候有连个方法供我们使用就是Convert.to和*.Parse,但是疑问就是什么时候用C 什么时候用P 通俗的解释大家都知道: Convert 用来转换继承自object类型的类型(当然所有的类型都是继承自object的),但是一般Convert用来转化直接就是obejct的类型,如我们用datareader从数据库取出一个数据的时候就是object类型的,此时你若用int.parse(dr["id"]):肯

C++中关于[]静态数组和new分配的动态数组的区别分析

这篇文章主要介绍了C++中关于[]静态数组和new分配的动态数组的区别分析,很重要的概念,需要的朋友可以参考下 本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加深对C++语言数组的理解.具体区别如下: 一.对静态数组名进行sizeof运算时,结果是整个数组占用空间的大小:因此可以用sizeof(数组名)/sizeof(*数组名)来获取数组的长度.int a[5]; 则sizeof(a)=20,sizeof(*a)=4.因为整个数组共占20字节,首个元素(i

转:Redis和Memcache的区别分析

Redis和Memcache的区别分析  原文链接:http://blog.csdn.net/u013474436/article/details/48632665 简单区别: 1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别. 2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储. 3. Redis支持数据的备份,即master-slave模式的数据备份. 4. Redis支持数据的持久化,可