PHP数组合并和去重的函数有哪些
PHP数组合并和去重的函数有哪些
一、总结
一句话总结:合并:array_merge() array_merge_recursive() +号;去重:array_flip() array_unique()
array_merge() array_merge_recursive() +号 array_flip() array_unique()
1、array_merge和+以及array_merge_recursive数组合并时对相同的字符串索引的操作是怎样的?
+前面的覆盖后面的
array_merge后面的覆盖前面的
array_merge_recursive增加数组维度
array_merge则会用后面的值覆盖前面出现的值;
+会用前面出现过的值覆盖后面相同的key;
array_merge_recursive则会把相同的索引放到一个数组里面,增加数组的维度;
2、array_merge和+以及array_merge_recursive数组合并时对相同的数字索引的操作是怎样的?
array_merge和array_merge_recursive重建(新增)索引
+前面的覆盖后面的
array_merge则会给重复的值重建索引(索引值从0开始);
+仍然是用前面出现过的值覆盖后面的值;
array_merge_recursive和array_merge的处理方法一样。
3、多维数组合并去重用的是哪个函数?
array_flip()函数-数组键值的翻转函数
array_flip()函数,而这个函数也是数组键值的翻转函数
$a = array('1001','1002');
$b = array('1002','1003','1004');
$c = array('1003','1004','1005');
$d = array_keys(array_flip($a) + array_flip($b) + array_flip($c));
二、PHP合并数组几种方式总结
参考:PHP合并数组几种方式总结 - 赖床四少 - 博客园
https://www.cnblogs.com/lcss/p/7757784.html
今天在做项目的时候,想将多个数组进行去重合并的操作。在此前合并数组我一直用的是array_merge()这个函数,今天我百度了一下,原来还有‘+'号,和array_merge_recursive函数。
下面是一段对比的代码
$array1 = array(2,4,"color" => "red");
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
echo "----------------array_merge---------------".PHP_EOL;
print_r($result);
echo "----------------+++++++++++---------------".PHP_EOL;
print_r($array1+$array2);
echo "----------------array_merge_recursive---------------".PHP_EOL;
print_r(array_merge_recursive($array1,$array2));
结果如下所示
----------------array_merge---------------Array(
[0] => 2
[1] => 4
[color] => green
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4)
----------------+++++++++++---------------Array(
[0] => 2
[1] => 4
[color] => red
[shape] => trapezoid
[2] => 4)
----------------array_merge_recursive---------------Array(
[0] => 2
[1] => 4
[color] => Array
(
[0] => red
[1] => green
)
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4)
对比array_merge和+以及array_merge_recursive结果的”color”的值我们可以看出:
1.对于相同的字符串索引,
array_merge则会用后面的值覆盖前面出现的值;
+会用前面出现过的值覆盖后面相同的key;
array_merge_recursive则会把相同的索引放到一个数组里面,增加数组的维度;
2.对于相同的数字索引,
array_merge则会给重复的值重建索引(索引值从0开始);
+仍然是用前面出现过的值覆盖后面的值;
array_merge_recursive和array_merge的处理方法一样。
但是这只是把数组进行合并,我做合并的同时还想要去重应该怎么办呢,那就用到了另外两个函数array_flip()函数和array_keys() 函数
要讲到数组合并与去重,这里就不得不提array_flip()函数,而这个函数也是数组键值的翻转函数。
For example:
$arr=array('10','11','12');$arr2=array('12','13','14');$arr3=array('14','15','16');
print_r(array_flip($arr)+array_flip($arr2)+array_flip($arr3));
output:
Array ( [10] => 0 [11] => 1 [12] => 2 [13] => 1 [14] => 2 [15] => 1 [16] => 2 )
1.单数组去重复
array_unique($arrTest)
array_unique() 函数移除数组中的重复的值,并返回结果数组。
当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。
返回的数组中键名不变。
<?php
$a=array("a"=>"red","b"=>"green","c"=>"red");
print_r(array_unique($a));
?>
运行结果:Array ( [a] => red [b] => green )
//2.多数组去重复
array_keys(array_flip($arr1)+array_flip($arr2))
array_keys() 函数返回包含数组中所有键名的一个新数组。
如果提供了第二个参数,则只返回键值为该值的键名。
返回包含数组中所有键名的一个新数组:
<?php
$a=array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander");
print_r(array_keys($a));
?>
运行结果:Array ( [a] => red [b] => green )
Array ( [0] => Volvo [1] => BMW [2] => Toyota )
对多个数组合并去重技巧
$a = array('1001','1002');
$b = array('1002','1003','1004');
$c = array('1003','1004','1005');
$d = array_keys(array_flip($a) + array_flip($b) + array_flip($c));
结合上边这些函数的分析和使用,相信以后日常对数组合并已经基本不成问题了。
PHP数组合并和去重的函数有哪些的更多相关文章
- JS 两个对象数组合并并去重
JS两个对象数组合并并去重 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- JS实现JSON数组合并和去重
var a=[{"id":"1001","name":"张三","age":"18&quo ...
- JS 数组常见操作汇总,数组去重、降维、排序、多数组合并实现思路整理
壹 ❀ 引 JavaScript开发中数组加工极为常见,其次在面试中被问及的概率也特别高,一直想整理一篇关于数组常见操作的文章,本文也算了却心愿了. 说在前面,文中的实现并非最佳,实现虽然有很多种,但 ...
- 数组合并--php
常用的合并数组方法有以下几种: 1 array_merge 2 '+' 3 array_merge_recursive 下面是一段对比的代码 $array1 = array(2,4," ...
- 手写面试编程题- 数组去重 深拷贝 获取文本节点 设置奇数偶数背景色 JS中检测变量为string类型的方法 第6题闭包 将两个数组合并为一个数组 怎样添加、移除、移动、复制、创建和查找节点? 继承 对一个数组实现随机排序 让元素水平 垂直居中的三种方式 通过jQuery的extend方法实现深拷贝
第1题==>实现数组去重 通过 new Set(数组名) // var arr = [12, 12, 3, 4, 5, 4, 5, 6, 6]; // var newarr1 = new Set ...
- 数组去重,排序,重复次数,两个数组合并,两个数组去重,map(),filter(),reduce()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- PHP数组合并+与array_merge的区别分析 & 对多个数组合并去重技巧
PHP中两个数组合并可以使用+或者array_merge,但之间还是有区别的,而且这些区别如果了解不清楚项目中会要命的! 主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意 ...
- php数组去重的函数代码
php中数组去重的小例子. 代码如下: <?php /** * 数组去重复的小函数 * by www.jbxue.com */ function assoc_unique($arr ...
- php数组合并方法array_merge + 排序array_multisort方法 array_unique数组去重 array_values数组索引值重新从0开始递增
$dingdan = array_merge($jie_dingdan,$user_dingdan);//数组合并方法 $orderFile = array(); foreach($dingdan a ...
随机推荐
- yolo3(目标检测)实测
yolo是继faster-r-cnn后,原作者在目标检测领域进行的新研究.到了v3版本以后,虽然已经换人支持,但是更注重工程实践,在实际使用过程中突出感受就是 “非常快”,GPU加速以后能够达到实时多 ...
- QML获取随机颜色
rect.color =);//random返回0~1的随机数
- Oracle SQL——inner jion;left join;right join的区别和使用场景
背景 在一次面试的时候,面试官让我说一下这三者的使用场景和区别,当时瞬间懵逼,哈哈.回来赶快看一看,记下来. 详解 inner join 等值查询:返回两张表中,联结字段值相等的组合记录 举例:所有学 ...
- DataSnap服务器从xe2升级到xe5报错的处理
DataSnap服务器从xe2升级到xe5环境下,能够正常编译,但运行后会报错,如下图: 处理参考: http://blogs.embarcadero.com/pawelglowacki/2013/0 ...
- strerror函数的总结【转】
本文转载自:https://www.cnblogs.com/xrcun/p/3210889.html 定义函数:char * strerror(int errnum); 函数说明:strerror() ...
- 【做题】TCSRM591 Div1 500 PyramidSequences——数形结合&思维
题意:定义高度为\(x\)的金字塔数列为周期为\(2x-2\)的无限数列.它的每一个周期都是形如\(1,2,...,x-1,x,x-1,...,2\)的形式.记高度为\(x\)的金字塔数列第\(i\) ...
- Tomcat和weblogic虚拟路径的配置
背景:上传的图片和web应用不在同个路径里,例如web应用在D盘,上传图片1.jpg在E:\upload\img目录里,这时就需要配置虚拟路径后,才能显示图片. Tomcat和WebLogic的不同配 ...
- (转载)Sublime Text 3 快捷键大全
选择类Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本.Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数名等 ...
- Luncene学习 第一天 《入门程序》
整个luncene 流程 下面贴出代码 package com.zuoyan.lucene.demo; import java.io.File; import org.apache.commons.i ...
- facebook api之Business Manager API
Business-scoped Users - The new user is tied to a particular business and has permissions scoped to ...