PHP 数组的合并与运算 php合并数组函数
qiyuwang 2024-11-06 20:15 13 浏览 0 评论
array_combine() 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
array array_combine ( array $keys , array $values )
$a1=array("OS","WebServer","DataBase","Language"); //声明第一个数组作为参数1
$a2=array("Linux","Apache","MySQL","PHP"); //声明第二个数组作为参数2
print_r(array_combine($a1,$a2)); //使用arrray_combine()将两个数组合并
//输出:Array ( [OS] => Linux [WebServer] => Apache [DataBase] => MySQL [Language] => PHP )
array_merge() 合并一个或多个数组
array array_merge ( array $array1 [, array $array2 [, array $... ]] )
array_merge() 将一个或多个数组的单元合并起来, 一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
在数组值相同的情况下, 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。
然而, 如果数组包含数字键名, 后面的值将不会覆盖原来的值, 而是附加到后面, 并为其重建数字索引。
如果只给了一个数组并且该数组是数字索引的, 则键名会以连续方式重新索引。 如果是唯一的字符串键名, 则保留键名。
如果关联数组和索引数组混合的, 则为索引数组重建索引, 关联数组的则保留键名;
//关联数组的键名相同的,则后面的值覆盖前一个值
$a1=array("a"=>"Linux","b"=>"Apache");
$a2=array("c"=>"MySQL","b"=>"PHP");
print_r(array_merge($a1,$a2)); //输出: Array ( [a] => Linux [b] => PHP [c] => MySQL )
//没有键名的数组,则为其重建索引
$a1=array("a"=>"Linux","Apache");
$a2=array("c"=>"MySQL","PHP");
print_r(array_merge($a1,$a2)); //输出:Array ( [a] => Linux [0] => Apache [c] => MySQL [1] => PHP )
//没有键名的数组且值相同,则为其重建索引,保留重复的值
$a1=array("a"=>"Linux","Apache");
$a2=array("c"=>"MySQL","php","Apache");
print_r(array_merge($a1,$a2)); //输出:Array ( [a] => Linux [0] => Apache [c] => MySQL [1] => php [2] => Apache )
//仅使用一个数组参数则键名以0开始进行重新索引
$a=array(3=>"PHP",4=>"MySQL");
print_r(array_merge($a)); //输出:Array ( [0] => PHP [1] => MySQL )
//索引数组的键名相同的,则重建索引
$a1=array("a"=>"Linux",1=>"Apache");
$a2=array("c"=>"MySQL",1=>"PHP");
print_r(array_merge($a1,$a2)); //输出:Array ( [a] => Linux [0] => Apache [c] => MySQL [1] => PHP )
//索引数组的键名相同的且键名相同的,则不会覆盖,重建索引
$a1=array("a"=>"Linux",1=>"Apache");
$a2=array("c"=>"MySQL",1=>"Apache");
print_r(array_merge($a1,$a2));//输出:Array ( [a] => Linux [0] => Apache [c] => MySQL [1] => Apache )
归纳: 关联数组的键名相同的, 后者覆盖前者, 且后者的键名保留;
索引数组的键名相同的, 会重建索引(原索引键名不保留), 不会出现覆盖;
索引名相同的情况下如何合并数组(避免同一个键名相同的情况下, 直接修改键值的问题)?
<?php
function array_add($a,$b){
$arr = array_intersect_key($a, $b);
foreach($b as $key=>$value){
if(!array_key_exists($key, $a)){
$a[$key]=$value;
}
}
foreach($arr as $key=>$value){
$a[$key]=$a[$key]+$b[$key];
}
return $a;
}
$a = array('0'=>'2','1'=>'4','3'=>'8','a'=>'100');
$b = array('0'=>'5','2'=>'4','b'=>'33','a'=>'22');
$arr=array_add($a,$b);
echo "<pre>";
print_r($arr);
echo "</pre>";
Array
(
[0] => 7
[1] => 4
[3] => 8
[a] => 122
[2] => 4
[b] => 33
)
注意:array_merge(array_merge(array1,array2,array3...))
三个参数必须为数组否则的话, 出现会错误, 因此在使用之前必须向判断是否是数组is_array();
使用运算符对数组进行合并
<?php
//声明两个数组,前两个元素下标相同,测试是否后面的会覆盖前面的
$a = array( "a"=>"Linux", "b"=>"Apache");
$b = array( "a"=>"PHP", "b"=>"MySQL", "c"=>"web" );
$c = $a + $b; //使用“+”合并两个数组,$a在前, $b在后,因为前两个下标相同, $b会覆盖
echo "合并后的 \$a 和 \$b: \n";
print_r($c); //结果: Array ( [a] => Linux [b] => Apache [c] => web )
$c = $b + $a; //使用“+”合并两个数组,$b在前, $a在后,因为前两个下标相同, $a会覆盖
echo "合并后的 \$a 和 \$b: \n";
print_r($c); //结果: Array ( [a] => PHP [b] => MySQL [c] => web )
归纳:对于索引数组, 不会重建索引(原键名保留);
对于关联数组, 键名也会保留;
键名相同的(索引数组和关联数组), 前者覆盖后者;
实例:array_merge()和运算符号"+"的比较
<?php
$a = array(1=>"a", 2=>"b", 3=>"c", "min"=>"f", "max"=>"j");
$b = array(2=>"e", 4=>"d", 5=>"c", "min"=>"h", "max"=>"j");
$c = $a + $b;
print_r($c);
echo "<br>";
$d = array_merge($a, $b);
print_r($d);
?>
输出结果:
Array ( [1] => a [2] => b [3] => c [min] => f [max] => j [4] => d [5] => c )
Array ( [0] => a [1] => b [2] => c [min] => h [max] => j [3] => e [4] => d [5] => c )
注意: print_r()函数在输出时, 自动为没有键名的元素添加数组索引后再输出;
数组的比较(==或===)
== 等于:
判断数组的长度是否相等
判断数组的索引下标是否相等
判断数组的值是否相等(不判断数据类型)
=== 恒等于:
判断数组的长度是否相等
判断数组的索引下标与索引顺序是否相等
判断数组的值是否相等, 还需要判断数据类型
<?php
$arr1 = array(1, 2, 3, 4);
$arr2 = array('a'=>1, 'b'=>2, 'c'=>3, 'd'=>4);
$arr3 = array('10'=>'1,2,3,4');
$arr4 = array('3'=>4,'2'=>3,'1'=>2,'0'=>1);
$arr5 = array('0'=>1,'1'=>2,'2'=>3,'3'=>4);
var_dump($arr1 == $arr2); //false
echo "<hr/>";
var_dump($arr1 == $arr4); //true
echo "<hr/>";
var_dump($arr1 == $arr5); //true
echo "<hr/>";
var_dump($arr1 === $arr4); //false
echo "<hr/>";
var_dump($arr1 === $arr5); //true
?>
拆分、分解函数见array_slice()和array_splice()的区别
array_intersect() 计算数组的交集
array array_intersect ( array $array1 , array $array2 [, array $ ... ] )
array_intersect() 返回一个数组, 该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
Array
(
[a] => green
[0] => red
)
array_diff() 计算数组的差集
array array_diff ( array $array1 , array $array2 [, array $ ... ] )
array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
Array
(
[1] => blue
)
array_intersect_assoc() 带索引检查计算数组的交集
array array_intersect_assoc ( array $array1 , array $array2 [, array $ ... ] )
注意: 此函数为没有键名的元素重建数字索引,其返回值为键名相同的元素(包括数字索引的键名不相同的,则不返回)
<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "b" => "yellow", "blue", "red");
$result_array = array_intersect_assoc($array1, $array2);
print_r($result_array);
?>
输出结果:
Array
(
[a] => green
)
array_diff_assoc() 带索引检查计算数组的差集
array array_diff_assoc ( array $array1 , array $array2 [, array $... ] )
注意: 此函数为没有键名的元素重建数字索引,其返回值为键名不相同的元素(包括数字索引的键名不相同的,则也返回)
<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>
输出结果:
Array
(
[b] => brown
[c] => blue
[0] => red //包含重建数字索引的键名
)
以上计算数组的交集和差集返回值会保留原有的键名(包括为其重建数字索引元素的键名也保留)
相关推荐
- 你真的会用Word画线吗?(word画线技巧)
-
【你真的会用Word画线吗?】①输入三个“=”回车,是一条双直线;②输入三个“”,回车,就是一条波浪线;③输入三个“”回车,就是一条虚线;④输入三个“-”,回车,就是一条细直线.....新技能get√...
- 「干货」Word技巧知识——进阶篇(2)
-
Hello,大家好,我是无拘无束的分享知识,每天跟大家分享点有用的知识,话不多说。感兴趣的朋友可以点赞、关注、收藏哦。1.将word文档中的硬回车全部消除从事来稿阅读、编辑的工作者,最头痛的事就是打...
- 办公室人员必备! Word快捷键大全(办公中常用的快捷键)
-
【Word里超简单的画线方法!】简历、总结里文字太多怎么办?用线条分隔!Word画线秘籍:①输三个"="回车,是一条双直线②输三个"~"回车,是一条波浪线③输三个"-"回车,就是一条细直线。(来源...
- Word笔记大全(详细步骤)(word怎么写笔记)
-
字处理一、文档的基本操作1.打开/新建2.快速新建ctrl+n3.利用模板创建文件--新建--选择模板officeplus4.保存5.保护文件--信息--保护文档--限制编辑--对话框:勾选每一项...
- 如何删除word文档空白页?(怎么删除word里的空白页?)
-
在日常办公或学习中,我们经常会遇到Word文档中出现空白页的情况,这不仅影响文档的美观,还可能造成打印浪费。下面,我将为大家详细介绍如何在Office和WPS中的Word里轻松删除这些恼人的空白页。...
- Win11学院:如何在Windows 11装机时禁用BitLocker磁盘加密
-
IT之家5月7日消息,微软计划在Windows1124H2装机过程默认启用BitLocker加密,对于用户来说有两方面的影响:其一是影响硬盘的性能,其二是用户如果没有解密密钥,可能...
- 办公小技巧:Word“安全模式”用通透
-
大家都知道Windows的安全模式。其实,Word也有安全模式。那么,Word的安全模式又是什么?何时使用这种模式?使用这种模式有何限制?当Word运行中遇到问题需要启用安全模式运行时,如何按照软件给...
- 段落结束敲回车,下一段格式变样了怎么处理#每天学习一点点
-
段落换行后的格式发生变化。段落结束敲回车键,下一段格式变样了怎么处理?大家有时候遇到文章敲回车键,在下一段打字之后会发现这一段的样子就会和之前的段落不一样,当然可以调整一下或者用格式刷刷一下,但是稍微...
- 硬回车、软回车等介绍(硬回车键和软回车键)
-
1.硬回车:硬回车占两个字节,在word中敲击Enter键即可输入硬回车,硬回车是真正的段落标记,在两个硬回车之间的文字自成一个段落。代码是^p(小写)。2.软回车:用Shift+Enter产...
- Word里超简单的画线方法!(word中如何画线条)
-
小厅分享【Word里超简单的画线方法!】简历、总结里文字太多怎么办?用线条分隔!Word画线秘籍:①输三个"="回车,是一条双直线②输三个"~"回车,是一条波浪线③输三个"-"回车,就是一条细直线...
- Word 如何更改图片、删除与删除背景,勾选图片等问题
-
如果插入到Word文档中的图片想另外换一张,更换方法有两种,一种是把原图删除另外插入一张,另一种是直接更换图片。Word2016提供了更改图片的功能,用此功能更换图片会自动把原图删除,就像...
- Word中批量删除空行(多种方案)(批量删除word中的空行)
-
如下图,在Word文档中存在大量空行(回车),为了文档整洁,需要批量取消这些回车;方法一Ctrl+h,在查找内容中输入”^p^p”,在替换为输入”^p”,单击全部替换即可(^符号在英文输入法下按Shi...
- Word文档如何取消自动编号?(word文档如何取消自动编号功能)
-
在word文档中,当我们编辑有序号的文本内容时,word会自动识别给文本编号,如果直接删除序号再按回车键,序号又会自动填充。但有时候我们并不需要它自动编号或不喜欢它的编号格式,如何才能取消word自动...
- 最全的Word知识点,抓紧时间收藏起来
-
Word知识点1.1word工作界面Word2010的窗口组成∶窗口分标题栏、菜单栏、常用工具栏、格式工具栏、标尺、编辑区滚动条、状态栏、任务窗格。1.标题栏∶显示所编辑的文档名和程序名称。单击标题...
- Word中的页眉横线就是删不掉?其实按下这个键,1秒就能去除
-
不知道大家在用Word的同时,有没有遇到过难删除的页眉横线呢?以前小编就是遇到这条横线,不得已将里面的文字复制到一个新的文档中,如今终于知道该怎样删除这条横线了,下面我们就来看看删除方法。一、删除页眉...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)