第四章:第29节 PHP数据类型-数组之数组运算符

更新于:2019-11-27 20:57:04

1.png


有些运算符对数组也是起作用的,先说“相等”。


相等(==): 如果两个数组具有相同的键名和键值(可以顺序不同,或类型不同),则返回true

$v1 = array(1, 2,3, 4);

$v2 = array(4,2,1,3);

$v3 = array(3=>4,1=>2,0=>1,2=>3);

此时:$v1和$v2 相等吗?——不等

此时:$v1和$v3 相等吗? ——相等


1.png


结果:

1.png

像“不等”、“不全等”、“全等”这些运算符就不讲解了,楠神也没用过,可用不大。


重点说下“联合”运算符,就是“+”。


1.png

结果:

1.png

将右边的数组$v2合并到左边数组$v1的后面,得到一个新数组$v3。如有重复键,则结果以左边的为准。就是$v1把$v2重复键上的值全部覆盖了。

就算键名为字符串,只要两个相“+”数组,有相同的键名,前者会覆盖后者组成一个新数组。

1.png

结果:

1.png


假如程序员想让后者覆盖前者重复的键名,怎么做?

一种做法是交换两个变量的位置,第二种方法就是使用array_merge()函数。


1.png

结果:

1.png

有朋友可能觉得这个函数多余,我用“+”换下两个数组的位置不也一样效果嘛。其实不是,array_merge函数与“+”有很大区别的。看下边的例子:


1.png

有朋友会不会觉得结果是Array ( [0] => 5 [1] => 6 [2] => 7 [3] => 8 [4] => 9 ) ,$v2把$v1重复键名覆盖组成新数组?其实不是这样的:


1.png


相同的键名没有被覆盖,两个数组的数据全部显示在一个数组里。


联合运算符“+”与array_merge()函数的区别总结:


共同点:把两个或多个数组合并成一个新数组。


不同点:

1)键名为数字(包括数字字符串)时,用“+”合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖),不是相同键名的那些值一块添加到新数组里。 array_merge()不会覆盖掉相同键名的值,都会添加到新数组里,只是后面数组相同键名会被重新分配数字键名。 

2)键名为字符时,“+”仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉,不是相同键名的那些值一块添加到新数组里。但array_merge()此时后面的数组会覆盖掉前面数组相同键名的值。


总结:

“+”对数字键、字符串键无区别,遇到相同键名前面数组覆盖后面数组,合成后的新数组保留原有键名。

“array_merge”对数字键、字符串键区别对待,遇到相同字符串键后面数组覆盖前面数组;遇到相同数字键互不影响,一块添加到新数组。特别说明,新数组不保留原有数字键,会以连续方式重新设置新键。


它俩的区别还是很重要的,面试时会遇到,写程序时,如果用的不当,会造成程序的出错。


本节学习代码》》》