大家不要吐槽我写的乱,其实是简书的markdown编辑器有问题,看内容感觉写的很乱。我联系过简书的技术人员,连我理都不理一下。大家不妨去看原文。格式清晰,页面右侧还有导航目录(仅限PC端页面)。
原文链接:原文也是我的
前言概述
PHP中拥有大量的数组处理函数。PHP语言本身就有大量的函数,又多又杂。
PHP中可以将数组分为一维数组、二维数组、和多维数组。也可以根据数组键名分为数字索引数组(indexed array)和关联数组(associative array)
1.数字索引数组(indexed array)
数字索引数组,使用数字(一般是整数)作为键名,默认从0开始。也可以指定从某个具体位置开始保存数据。
如果键名既有数字又有字符串,则是关联数组
2.关联数组(associative array)
关联数组,键名是字符串,或字符串与数字混合形式。
只要键名中有一个不是数字,则该数组就是关联数组
创建二维数组
创建一维数组较为简单,故略去
数组元素本身仍是数组的数组就是二维数组;二维数组的使用和定义与一维数组相同,区别在于二维数组的元素仍然是数字。
由数组标识符"[]"创建二维数组
不多说废话,直接上源码
<?php
$arr[1]=array("PHP入门","PHP模块","PHP教程"); //定义了一个数字索引型的二维数组
$arr["JAVA图书"]=array("a"=>"JAVA手册",“b”=>"JAVA宝典"); //定义了一个关联二维数组
print_r($arr); //print_r()函数可以按照键值顺序输出数组中的值。对于非数组则输出本身
?>
由array()函数创建二维数组
<?php
$str = array(
"PHP图书"=>array("PHP入门","PHP模块",“PHP教程”),
"JAVA图书"=>array("a"=>"JAVA范例","b"=>"JAVA宝典";
"ASP图书"=>array("ASP入精",2+>"ASP范例","ASP模块");
);
print_r($str);
?>
遍历输出数组
foreach遍历数组
据说foreach是PHP中专门用来遍历数组的。
在PHP中foreach循环语句,常用于遍历数组,一般有两种使用方式:不取下标、取下标。
(1)只取值,不取下标
<?php
foreach (数组 as 值){
//执行的任务
}
?>
(2)同时取下标和值
<?php
foreach (数组 as 下标 => 值){
//执行的任务
}
?>
列出所有学生姓名!
有一组以学号为下标,姓名为值的数组,这时候需要遍历数组的姓名。
<?php
$students = array(
'2010'=>'令狐冲',
'2011'=>'林平之',
'2012'=>'曲洋',
'2013'=>'任盈盈',
'2014'=>'向问天',
'2015'=>'任我行',
'2016'=>'冲虚',
'2017'=>'方正',
'2018'=>'岳不群',
'2019'=>'宁中则',
);//10个学生的学号和姓名,用数组存储
//使用循环结构遍历数组,获取学号和姓名
foreach($students as $v){
echo $v;//输出(打印)姓名
echo "<br />";
}
?>
//执行后只会输出学生姓名
列出所有学生学号和姓名!
有时候需要同时列出学号和姓名。
<?php
$students = array(
'2010'=>'令狐冲',
'2011'=>'林平之',
'2012'=>'曲洋',
'2013'=>'任盈盈',
'2014'=>'向问天',
'2015'=>'任我行',
'2016'=>'冲虚',
'2017'=>'方正',
'2018'=>'岳不群',
'2019'=>'宁中则',
);//10个学生的学号和姓名,用数组存储
//使用循环结构遍历数组,获取学号和姓名
foreach($students as $key =>$v)
{
echo $key.":".$v;//输出(打印)学号:姓名
echo "<br />";
}
?>
通过list()和each()遍历数组
谔谔,这个方法常用吗。大多数情况下foreach完全够用啦。
但还是把示例代码贴出来吧。
list()将数组中的值赋给变量
each()返回数组当前的键与值,并且指针下移一位
<?php
$arr=array('a'=>'11','b'=>'22','c'=>'33');
while(list($key,$var)=each($arr)){
echo $key.'='.$var,'<br/>';
}
?>
输出数组
1.print_r()函数
print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer或float,将打印变量值本身。如果给出的是数组,将会按照一定格式显示键和元素。对象与数组类似。
记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
2.var_dump()函数
可以输出数组(或对象),元素数量以及每个字符串的长度,还能以缩进方式输出数组或对象的结构。
数组函数及应用
创建数组的函数
1.range()函数:创建并返回一个包含指定范围的元素的数组;
2.array_combine():合并两个数组为一新数组,一数组作键名,一数组作相应的值。
3.array_fill():用给定的值填充建立一个数组
4.array_pad():用指定值填充数组到指定长度,长度正填右,负填左,小于或等于不填充。
5.explode():字符串分割,返回值为数组;
数组统计函数
1.count()函数:统计数组中元素格式;
2.max()函数:统计计算数组中元素最大值;
3.min()函数:。。。。数组中元素最小值;
4.array_sum()函数:将数组中所有值的和以整数或浮点数的结果返回;
5.array_count_values()函数:
函数对数组中的所有值进行计数。
<?php
$a=array("A","Cat","Dog","A","Dog");
print_r(array_count_values($a));
?>
数组指针函数
1.key()函数:返回数组中当前单元的键名;
2.current()函数:返回数组中当前单元的值;
3.nect()函数:将数组内部指针前移一位;
4.pre()函数:将数组内部指针向后逆向移动一位(与next相反);
5.end()函数:将数组内部指针移动到最后一个单元,并返回其值;
6.reset()函数:将数组内部指针返回到第一个单元,并返回第一个单元值;
感觉这些平时不怎么用吧,后面要到再说吧。不然要谷歌干啥啊。
数组和变量之间的转换
1.extract()函数:使用数组定义变量
可以使用数组定义一组变量,其中新定义的变量名是数组的键名,变量的值是数组元素键名对应的值。
<?php
$arr=arrar("name"=>"张三","sex"=>"男","age"=>"20");
extract($arr);
echo $name;
echo <br>;
echo $sex;
echo <br>;
echo $age;
?>
不出意外的话运行结果就应该是:
张三
男
20
2.compact()函数
和extract()恰恰相反,compact()函数可以使用变量建立一个数组,每个数组元素的变量名作为键名,每个数组元素变量的值作为变量名对应的变量值。
<?php
$a = "php";
$b = "java";
$c = "asp";
$result = compact("a","b","c");
print_r(result);
?>
不出意外的话,运行结果就应该是:
Array([a]=>php [b]=>java [c]=>asp)
数组检索函数
1.array_keys()函数
用于获取数组中所有的键名,返回值为数组。
<?php
$array = array(0=>100,"php"=>"图书");
$arr1 = array_keys($array);
print_r($arr1); //这里应该输出Array([0]=>0,[1]=>php)
$array = array("php","asp","java","php");
$arr2 = array_keys($array,"php");
print_r($arr2); //Array([0]=>0,[1]=>3)
?>
2.array_values()函数
用于返回数组中所有的值并给其建立数字索引。即使原来有数字索引也会被清楚,从0重新开始
<?php
$array = array("手册"=>"php手册","php应用","php"=>"php手册","php应用","php案例");
$result = array_values($array);
print_r($result);
?>
不出意外的话,运行结果应该是:
Array([0]=>php手册 [1]=>php应用 [2]=>PHP手册 [3]=>php应用 [4]=>php案例)
3.in_array()函数
在数组中检测某个值是否存在,找到存在则返回true,否则false。
<?php
$array = array("Php","asP","jAva","html");
if(in_array("php",$array)){
echo "php in array"; //检索字符串时会区分大小写
}
if(in_array("Java",$array)){
echo "JAva in array";
}
echo <br>;
$arr = array("100",200,300);
if(in_array("200",$arr,TRUE)){ //TRUE会要求数组值的类型也相同,区分字符类型
echo "200 in arr";
}
if(in_array(300,$arr,TRUE)){
echo "300 in array";
}
?>
不出意外的话,运行结果应该是:
jAva in array
300 in array
4.array_search()函数
用于在数组中具体搜索某个给定的值,若找到则返回键名,否则返回false。
<?php
$arr = array("php","asp","60");
if(array_search(60,$arr)){
echo "数组中有60"<br>;
}else{
echo "数组中没有60<br>"
}
if(array_search(60,$arr,true){ //加上true选项,区分数据类型。
echo "数组中有60 <br>";
}else{
echo "数组中无60 <br>";
}
?>
如果上面代码没敲错,不出意外的话,运行结果应该是:
数组中有60
数组中无60
5.array_key_exists()函数
检查数组中是否存在给定的某键名/索引,若存在,则返回true
<?php
$array = array("php"=>58,"ajax"=>54);
if(array_key_exists("php",$arrar)){
echo "php这个键名存在于数组中";
}
?>
。。。。。这个还用我说运行结果吗?
6.array_unique()函数
删除数组中的重复元素,该函数会先将数组中的所有值作为字符串排序,然后每个值只保留一个。
<?php
$arr_int = array("PHP","JAVA","ASP","PHP","ASP");
$result = array_unique($arr_int);
print_r($result);
?>
不出意外的话,运行结果应该是:
Array([0]=>"PHP" [1]=>"JAVA" [2]=>"ASP");
数组排序函数
1.sort()函数
将数组元素值以升序排序,并为排序后的数组赋予新的整数键名索引。
<?php
$array = array("a"=>"asp","p"=>"php","j"=>"jsp");
sort($array);
print_r($array); //输出的数组还是$array,也就是说sort()将数组array处理替换成了新的数组。
?>
那么,不出意外的话,运行结果就应该是:
Array([0]=>"asp" [1]=>"jsp" [2]=>"php")
2.asort()函数
与sort()函数相类似,区别在于排序后会保持数组元素原有的键值对的对应关系。
<?php
$array = array("a"=>"asp","p"=>"php","j"=>"jsp");
asort($array);
print_r($array);
?>
不出意外的话,运行结果如下:
Array([a]=>"asp" [j]=>"jsp" [p]=>"php")
3.rsort()和arsort()函数
rsort()函数与sort()函数的语法格式相同,arsort()函数与asort()函数的语法格式相同;区别之处在于rsort()和arsort()函数是按照降序排列的。
4.ksort()和krsort()函数
根据数组元素的键名按照升序/降序排序,排序后保持数组元素原有的“键值对对应关系”
<?php
$array1 = array("a"=>"asp","p"=>"php","j"=>"jsp");
ksort($array1);
print_r($array1);
echo <br>;
$array2 = array("a"=>"asp","p"=>"php","j"=>"jsp");
krsort($array2);
print_r($array2);
?>
不出意外的话,运行结果就应该是:
Array([a]=>"asp" [j]=>"jsp" [p]=>"php")
Array([p]=>"php" [j]=>"jsp" [a]=>"asp")
5.natsort()和natcasesort()函数
以自然排序算法对数组元素的值进行升序/降序排序。排序后保持数组元素原有的“键值对”对应关系。
鬼知道这个自然排序是怎么排的,貌似跟字符串的长度和字符顺序大小有点关系。现在感觉用处不大,不管啦。
呃呃,还是把实例敲一遍吧。
<?php
$array1=array("index1","Index11","index2");
natsort($array1);
print_r($array1);
echo <br>;
$array2=array("index1","Index11","index2");
natcasesort($array2);
print_r($array2);
?>
反正资料上说运行结果应该是这样的:
Array([1]=>Index11 [0]=>index1 [2]=>index2) //“键值对对应关系不变” 升序
Array([0]=>index1 [2]=>index2 [1]=>Index11) //“键值对对应关系不变” 降序
6.shuffle()函数
对数组中的元素进行随机排序,随机排序后的数组将会被赋予新的“整数键名”。
<?php
$array=array("a"=>"asp","p"=>"php","j"=>"jsp");
shuffle($array);
print_r($array);
?>
运行结果是什么???
不是都说了是随机的啊。。
7.array_reverse()函数
返回一个和数组元素顺序相反的新数组。
<?php
$arr = array("asp","php","jsp");
$result = array_reverse($arr); //不保留原有的“键值对”对应关系
print_r($result);
echo <br>;
$result2 = array_reverse($arr,true); //true选项,保留原有的“键值对”对应关系。
print_r($result2);
?>
又到了预测运行结果的时候了:
Array([0]=>jsp [1]=>php [2]=>asp)
Array([2]=>asp [1]=>php [0]=>jsp)
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊 函数好多啊,怎么可能完完全全牢牢记住不忘呢。还是过一遍留个影响 啊
啊 用的时候用啥查啥吧.... 啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
数组与数据结构
1.array_push()函数
用于向数组末尾添加一个或多个元素,并返回新数组元素的个数。
<?php
$array = array(0=>"php",1=>"java");
array_push($array,'VB','VC');
print_r($array);
?>
不出意外的话我,运行结果是:
Array([0]=>php [1]=>java [2]=>VB [3]=>VC)
2.array_pop()函数
用于弹出数组中最后一个元素,并返回该元素值。同时将数组的长度-1。如果数组为空(或者不是数组),将返回null。
<?php
$arr = array("asp","javasript","jsp","php");
$array = array_pop($arr);
echo "被弹出的单元是:$array <br>" ;
print_r($arr);
?>
如果不出意外的话,运行结果将会是:
被弹出的元素是:php
Array([0]=>asp,[1]=>javascript,[2]=>jsp)
哈哈哈,大人真乃神人也~预测的一点也不错。
嗯嗯。我可能疯了。我傻,我呆😳,我蠢。。。
3.array_shift()函数
删除数组第一个元素,并返回该元素值。数组为空或非数组则返回null。
<?php
$arr = array("php手册","php案例","php应用");
$result = array_shift($arr);
echo $result.<br>;
print_r($arr);
?>
不出意外的话,运行结果应该是:
php手册
Array([0]=>php案例 [1]=>php应用)
4.array_unshift()函数
用于在数组开头插入一个或多个元素,并返回插入元素的个数。
<?php
$array = array(0=>"php",1=>"java");
array_unshift($array,'VB','VC');
print_r($array);
?>
不出意外的话,运行结果是:
Array([0]=>VB [1]=>VC [2]=php [3]=>java)
数组集合类函数
1.array_merge()函数
可以把两个或多个数组合并成一个数组。
在合并数组时,如果输入的数组中有相同的字符串键名,则后面的值将覆盖前面的值;如果数组包含数字键名,后面的值不会覆盖原来的值,而是附加到后面。
<?php
$str1 = array("图书"=>"白鹿原",10);
$str2 = array("图书"=>"茶花女","PHP"=>"95元",10);
$result = array_merge($str1,$str2);
print_r($result);
?>
不出意外的话,代码的运行结果应该为:
Array([图书]=>茶花女 [0]=>10 [PHP]=>95元,[1]=10)
//有相同的字符串键名,则后面的值将覆盖前面的值
//数组包含数字键名,后面的值不会覆盖原来的值,而是附加到后面
2.array_diff()函数
用来计算数组的差集,结果返回一个数组。该数组包括所有在被比较的数组中但是不在任何其他参数数组中的值,键名保留不变。
<?php
$array1 = array("asp"=>"实例应用","php"=>"函数手册","java"=>"基础应用");
$array2 = array("asp"=>"实例应用","函数大全","基础应用");
$result = array_diff($array1,$array2); //其实括号中的参数可以是好多个,但是最少要两个啊。
print_r($result);
?>
反正书上说运行结果是:
Array([php]=>"函数手册");
呃呃呃,书上啰里啰唆说了半天。就是第一个数组是被比较数组,后面其他的数组都是比较数组。
被比较数组有,而比较数组没有的。把数组中的这个元素的键名和值产生一个新的数组。
3.array_diff_assoc()函数
带索引检查计算数组的差集。。。(什么玩意???不懂!)结果返回一个数组。该数组包括所有在被比较的数组中但是不在任何其他参数数组中的值,键名也用于比较。
又是不啦不啦的一段屁话,还不如实例让人看得明白。上示例代码!
<?php
$array1 = array("asp"=>"实例应用","php"=>"函数手册","java"=>"基础应用");
$array2 = array("asp"=>"实例应用","函数大全","基础应用");
$result = array_diff_assoc($str1,$str2);
print_r($result);
?>
。。。没看到狗屁概念,运行结果没法预测啊。。。
抄资料吧。
Array([php]=>函数手册 [java]=>基础应用)
呃呃呃,作用跟array_diff()函数都是一样的,只不过比较的时候也要比较键名。也就是说array_diff()函数在比较数组差集的时候是无视掉键名的。
4.array_diff_key()函数
用来计算数组差集,结果返回为数组。貌似主要是在比较键名,而array_diff()和array_diff_assoc()两个函数貌似主要是用值在比较呢。
不废话,直接上示例代码;
<?php
$array1 = array("asp"=>"实例应用","php"=>"函数手册","java"=>"基础应用");
$array2 = array("asp"=>"实例大全","函数大全","基础应用");
$result = array_diff_key($array1,$array2);
print_r($result);
?>
不想预测结果了,本篇后面的几个示例我都不想预测了。。。
Array([php]=>函数手册 [java]=>基础应用)
加油,坚持。再有三个导函数这篇文章就写完了啊aaa!
5.array_intersect()函数
用来获取多个数组的交集。没错就像集合的交集一样。之前还改人家的标题数组集合类函数,写到这里才真正理解了,这些函数就是集合概念相关的函数啊。
<?php
$array1 = array("asp"=>"实例应用","php"=>"函数手册","java"=>"基础应用");
$array2 = array("asp"=>"实例应用","函数大全","基础应用");
$result = array_intersect($array1,$array2);
print_r($result);
?>
运行结果:
Array([asp]=>实例应用 "java" => 基础应用)
6.array_intersect_assoc()函数
作用和array_intersect()函数一样,只是作交集运算时,键名也加入比较。类比下array_diff()函数之于array_diff_assoc()函数。
实例略了,略了。跟上一个一样,有啥好写的。。。
7.array_intersect_key()
我天,略去了一个真爽。。。一下子就到了最后一个函数了。
呃呃,这个函数和之前的函数类比也是一下子就理解了啊。求交集,以键名为主求交集。array_intersect()和array_intersect_assoc()函数在求交集的时候主要是以值为主,求的交集啊。
略了,略了。这个也略了。么错,就这么懒,就这么任性。
最后总结下数组集合类的函数特点。
array_merge()函数用来把多个数组合并为一个数组。
array_diff() 以数组的值为主,返回其差集
array_diff_assoc() 以数组的值为主,带上键名返回其差集
array_diff_key() 以数组的键名为主,返回其差集
array_intersect() 以数组的值为主,返回其交集
array_intersect_assoc() 以数组的值为主,带上键名返回其交集
array_intersect_key() 以数组的键名为主,返回其交集。
//不是要用别人的,总结是自己原创总结的。转载保留出处啊。
嗯嗯。没毛病。终于写完啦。。。这一篇写了我两天啊啊啊。
好久没写博客,一写写了一大长篇。