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

2014-02-01  来源:本站原创  分类:php技巧  人气:7 

今天处理一个这样的问题:如何获取字符键名相同值不同的两个数组值集合,用array_merge和数组相加都不可行,让我认真比较了下PHP中array_merge和array相加的区别

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

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

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

复制代码 代码如下:

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

特别要注意。关于“array_merge和数组相加的区别”上面已经阐述的很清楚了,回到我最初的问题“如何最有效的获取字符键名相同值不同的两个数组值集合呢”,不会这要对每个数组遍历吧,PHP中还有一个函数,获取你不常用:array_merge_recursive — 递归地合并一个或多个数组,如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去。如下例:

复制代码 代码如下:

<?php
$arr1 = array("a"=>"php","c");
$arr2 = array("a"=>"java","c","ruby");
print_r(array_merge_recursive($arr1, $arr2));
?>

结果如下:
Array
(
[a] => Array
(
[0] => php
[1] => java
)
[0] => c
[1] => c
[2] => ruby
)
这样,就可以获取多个数组中键名相同的元素值集合了。

相关文章
  • PHP中array_merge和array相加的区别分析 2014-02-01

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

  • 解析php中array_merge与array+array的区别 2014-04-10

    本篇文章是对php中array_merge与array+array的区别进行了详细的分析介绍,需要的朋友参考下 array_merge是丢弃原来的数字的key,而保留字符串形式的key,然后组成一个新的数组,不管键名是否一样,都不合并,除非键名和value同时一样并且还必须是字符串形式的key才合并.而array+array就是不管你是什么情况,它都只会先把前面的数组的数据先放到新生成的数组中,之后再看第二个array是否比第一个数组个数多,多的就添加进来,它只数个数,但是这种情况它会添加进来:

  • JS中confirm,alert,prompt函数使用区别分析 2013-10-23

    JS中confirm,alert,prompt函数使用区别分析,需要的朋友可以参考下. window.alert:参数,只有一个,显示警告框的信息; 无返回值. <script> window.alert("确定.") </script> window.confirm : 参数就只有一个.显示提示框的信息. 按确定,返回true; 按取消返回false. <script> var bln = window.confirm("确定吗?&quo

  • php中数字0和空值的区别分析 2014-04-02

    这篇文章主要介绍了php中数字0和空值的区别分析,用一个实例来供大家调戏,需要的朋友可以参考下 作为一个合格的php程序员,一些基础知识是必须要知道的,例如0和空的区别,关于这个区别,下面就通过几个实例进行简单的分析,其中的道理,只可意会,不可言传,读者可以自己去慢慢体会了. <?php $test=0; if($test==''){ echo '<br />在php中,0即为空'; //被输出 } if($test===''){ echo '<br />在php中,0即为空

  • Android中gravity与layout_gravity的使用区别分析 2014-12-09

    本篇文章介绍了,在Android中gravity与layout_gravity的使用区别分析.需要的朋友参考下 android:gravity:设置的是控件自身上面的内容位置 android:layout_gravity:设置控件本身相对于父控件的显示位置. 看下如下代码段 <?xml version="1.0" encoding="utf-8"?> <!-- android:gravity设置了按钮上面的文字的显示位置,而android:layo

  • .net中as和is之间的区别分析 2015-01-14

    .net中as和is之间的区别分析,需要的朋友可以参考一下 1.as 用于在兼容的引用类型之间执行转换,as 运算符类似于强制转换操作:但是,如果转换不可行,as 会返回 null 而不是引发异常.更严格地说,这种形式的表达式:expression as type,等效于expression is type ? (type)expression : (type)null,只是 expression 只被计算一次.注意,as 运算符只执行引用转换和装箱转换.as 运算符无法执行其他转换,如用户定义

  • Go语言中普通函数与方法的区别分析 2014-01-05

    这篇文章主要介绍了Go语言中普通函数与方法的区别,以实例形式对比分析了普通函数与方法使用时的区别与相关技巧,需要的朋友可以参考下 本文实例分析了Go语言中普通函数与方法的区别.分享给大家供大家参考.具体分析如下: 1.对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然. 2.对于方法(如struct的方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以. 以下为简单示例: package structTest //普通函数与方法的区别(在接收者分别为值

  • C#中Convert.ToString和ToString的区别分析 2014-03-25

    这篇文章主要介绍了C#中Convert.ToString和ToString的区别,是C#初学者需要牢固掌握的技巧,需要的朋友可以参考下 本文实例分析了C#中Convert.ToString和ToString的区别,对于初学者来说是很有必要加以熟练掌握的.具体分析如下: 1.Convert.ToString能处理字符串为null的情况. 测试代码如下: static void Main(string[] args) { string msg = null; Console.WriteLine(Co

  • JS中三目运算符和if else的区别分析与示例 2014-04-05

    本文是通过示例详细分析了JS中三目运算符和if else的区别,是篇非常不错的文章,这里推荐给大家. 今天写了一个图片轮播的小demo,用到了判断 先试了一下if else,代码如下: if(n >= count-1){ n =0; }else{ n ++; } 随后代码写完了,准备优化一下代码,将此段改成了三目运算符的写法 复制代码 代码如下: n = n >= (count-1) ? n=0 : n++ 结果完全不同 随后研究了一下这两者的区别,总结为一句话:三目运算有返回值,if els

  • node.js中的定时器nextTick()和setImmediate()区别分析 2014-12-14

    本文介绍了node.js中的定时器nextTick()和setImmediate()的区别分析,非常的不错,这里推荐给大家. 1.node中使用定时器的问题在于,它并非精确的.譬如setTimeout()设定一个任务在10ms后执行,但是在9ms后,有一个任务占用了5ms,再次轮到定时器时,已经耽误了4ms. 好了node中的定时器就简单的讲这么多. 2.看代码: process.nextTick(function(){ console.log("延迟执行"); }); console

  • C++中引用&与取地址&的区别分析 2015-03-28

    这篇文章主要介绍了C++中引用&与取地址&的区别,有助于C++初学者更好的掌握指针的概念及用法,需要的朋友可以参考下 C++中的引用&与取址&是很多初学者经常容易出错的地方,今天本文就对此加以分析总结,供大家参考之用. 具体而言,一个是用来传值的 一个是用来获取首地址的 &(引用)==>出现在变量声明语句中位于变量左边时,表示声明的是引用. 例如: int &rf; // 声明一个int型的引用rf &(取地址运算符)==>在给变量赋初值

  • SQLServer中临时表与表变量的区别分析 2014-10-23

    我们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量. 在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Server的系统日志,虽它们在Tempdb中体现,是

  • PHP中全局变量global和$GLOBALS[]的区别分析 2013-10-08

    $GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针 一.举例比较 例一: <?php $var1 = 1; function test(){ unset($GLOBALS['var1']); } test(); echo $var1; ?> 因为$var1被删除了,所以什么东西都没有打印. 例二: 复制代码 代码如下: <?php $var1 = 1; function test(){ global $var1; unset($va

  • 在jQuery ajax中按钮button和submit的区别分析 2014-08-06

    昨天在使用jQuery ajax的post方法进行页面传值,无刷新获取数据展示,弄了半天就是没有效果,看了半天也没有语法错误,最后才终于明白问题出在哪里 <script type="text/javascript"> $(document).ready(function(){ $("#submit").click(function(){ $.post("sendPwd.php",{QQnum:$("#QQnum")

  • C语言中关于sizeof 和 strlen的区别分析 2014-10-31

    本文通过示例简单分析了4种情况下C语言中sizeof 和 strlen的区别,算是个人经验的一个小小的总结,如有遗漏还请大家告知. 1.编译时计算运算符sizeof,可用类型或变量做参数,计算占用内存的大小.sizeof后若是类型必须加括弧,若是变量名可不加括弧.sizeof(x)可用来定义数组维数如: printf("%d\n", sizeof(short)); 输出的结果为短整型的长度2.用结构类型或变量做参数时,sizeof 返回实际的大小,当用于静态数组时,sizeof 返回全

  • .NET MVC中ViewData,ViewBag和TempData的区别浅析 2015-01-02

    这篇文章主要介绍了.NET MVC中ViewData,ViewBag和TempData的区别,分析了ViewData,ViewBag和TempData在赋值.功能特性等方面的区别于用法,具有一定参考借鉴价值,需要的朋友可以参考下 本文分析了.NET MVC中ViewData,ViewBag和TempData的区别.分享给大家供大家参考.具体分析如下: ViewData和TempData是字典类型,赋值方式用字典方式,如: ViewData["myName"] ViewBag是动态类型,

  • 解析C#中[],List,Array,ArrayList的区别及应用 2014-05-09

    本篇文章主要是对C#中[],List,Array,ArrayList的区别及应用进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 [] 是针对特定类型.固定长度的. List 是针对特定类型.任意长度的. Array 是针对任意类型.固定长度的. ArrayList 是针对任意类型.任意长度的. Array 和 ArrayList 是通过存储 object 实现任意类型的,所以使用时要转换. 应用示例 using System; using System.Collections.G

  • php中is_null,empty,isset,unset 的区别详细介绍 2013-10-09

    本篇文章介绍了,php中is_null,empty,isset,unset 的区别详细分析.需要的朋友参考下 is_null, empty, isset, unset 我们先来看看这4个函数的描述. isset 判断变量是否已存在(配置) unset 把变量删除(释放)掉 empty 判断变量是否为空 is_null 判断变量是否为NULL ok,已经开始搞人了.那么开始,这4个函数中除了unset,其他3个都是判断函数,unset首先出局,因为他不会搞错,其次是is_null,我们可以把它看成

  • php中var_export与var_dump的区别分析 2014-02-23

    php中var_export与var_dump的区别分析,在大多数情况下,多用var_dump来输出,因为它也输出了数据类型. 一 var_dump (PHP 3 >= 3.0.5, PHP 4, PHP 5) var_dump -- 打印变量的相关信息 描述 void var_dump ( mixed expression [, mixed expression [, ...]] ) 此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值.数组将递归展开值,通过缩进显示其结构. $da

  • JS中typeof与instanceof之间的区别总结 2014-03-14

    本文是对JS中typeof与instanceof之间的区别进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型. 它返回值是一个字符串,该字符串说明运算数的类型.typeof 一般只能返回如下几个结果: number,boolean,string,functio