PHP数组函数讲解.docx
- 文档编号:26897970
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:13
- 大小:19.93KB
PHP数组函数讲解.docx
《PHP数组函数讲解.docx》由会员分享,可在线阅读,更多相关《PHP数组函数讲解.docx(13页珍藏版)》请在冰豆网上搜索。
PHP数组函数讲解
我把数组的函数,进行了简单的分类,这样能更清晰一些
1.键名变成大写或者小写:
array_change_key_case($arr,CASE_UPPER/CASE_LOWER);
upper就代表转成大写,lower就代表转成小写
其实数组的键名是分大小写的,如果说,转换之后有的键重复了,那么前面的键名会被后面的覆盖。
2.分割数组:
array_chunk($arr,数量,true/false),
把数组按个数分,每组xxx个元素分割,把原数组的元素分配到小组中,如果元素组不够平均分摊,那么确保能平均分的平均分,剩下的可以缺;最后一项为真,那么保留原数组的键名,假的话就不保留,形成一个新数组
3.合并数组:
(1)将两个数组的值,一个作为新数组的键名,一个作为数组的键值,组合成新数组:
array_combine($arr1,$arr2);
$arr1的值,形成新数组的键,$arr2的值,形成新数组的值。
注意:
$arr1和$arr2的个数必须一致,否则报错。
(2)将多个数组捏成一个数组:
array_merge($arr1,$arr2,$arr3....);
多个数组的时候,如果原来的键名不是整形,那么会保留下来,如有冲突,则最后的元素会覆盖其他元素;如果原来的键值有整形,那么新数组会把所有整形的键名打破,重新从0开始排。
一个数组的时候,如果里面没有整形,那么新数组和元素组一样;如果有整形,那么把键名打碎重组。
array_merge对于键名冲突的情况,采取的是覆盖的策略。
(3)array_merge_recursive($arr1,$arr2,$arr3....);
与array_merge唯一不同的地方就是,他对于冲突的键名,采取的办法是,将所有键名相同的值,归拢成一个数组,而且里面的键名从0开始定义,保留每一个值。
recursive是递归的意思。
4.求差值:
(1)比较几个数组之间的值,返回他们的差值:
array_diff($arr1,$arr2,$arr3....);
这个差值代表:
先比较$arr1和$arr2,从$arr1中删去$arr2中和$arr1相同的值的部分;再比较$arr1和$arr3,同样的从$arr1删去相同的部分;以此类推,形成新的数组,键和值都是没有被删去的,原样保留。
(2)比较几个数组之间的值,返回他们的差值(使用自定义函数比较键名):
array_udiff($arr1,$arr2,$arr3....,'functionname');
(3)比较几个数组之间的键,返回他们的差值:
array_diff_key($arr1,$arr2,$arr3....);
与array_diff()类似,但是比较的是值。
(4)比较几个数组之间的键和值,返回他们的差值:
array_diff_assoc($arr1,$arr2,$arr3....);
这个要比较键和值,两个数组的键和值都相同时才可以删去。
(5)比较几个数组之间的键和值,返回他们的差值(使用自定义函数比较键名):
array_diff_uassoc($arr1,$arr2,$arr3....,'functionname');
比较键和值,使用用户自定义的函数来求差值
(6)比较几个数组之间的键和值,返回他们的差值(使用内建函数比较键名,使用自定义函数比较键值):
array_udiff_assoc($arr1,$arr2,$arr3....,'functionname');
(7)比较几个数组之间的键和值,返回他们的差值(使用自定义函数比较键名和键值):
array_udiff_uassoc($arr1,$arr2,$arr3....,'functionname1','functionname2');
5.填充
(1)创建一个数组,用一个值来填充:
$arr=array_fill(索引起始,值的个数,值);
索引起始只能是数字,但是可以是小数、负数,值的个数必须是正数。
最后形成的数组,所有的值都是一样的。
(2)创建一个数组,用一个数组作为键名,一个值作为键值来填充:
$arr=array_fill_key($arr,'值');
新数组的键名是原来$arr中的值,值都是新设定的值,而且都是一样的。
(3)将一定数量的特定值填充进已知数组:
$newarr=array_pad($arr,个数,插入的值);
其中那个个数代表了插入之后新数组的个数,这个值可以是浮点型,他会自动转换成整形,当他是正的时候,代表从后面插入新的值;当他是负的时候,代表他从前面插入新的值;当这个值小于原数组本身元素的个数的时候,填充失败,没什么变化。
6.用回调函数过滤数组中的元素:
array_filter($arr,callbackfunciton);
filter是过滤的意思。
7.求交集:
(1)比较几个数组之间的键值,求交集:
array_intersect($arr1,$arr2,$arr3...);
inersect是交叉的意思。
这个要根据值来比较,首先把$arr1和$arr2比较,求交集,删去不相交的部分,形成的数组,再和$arr3来比较...
(2)比较几个数组之间的键值,求交集(使用用户自定义函数):
array_uintersect($arr1,$arr2,$arr3....,'functionname');
(2)比较几个数组之间的键名,求交集:
array_intersect_key($arr1,$arr2,$arr3...);
(3)比较几个数组之间的键名,求交集(用自定义函数):
array_intersect_ukey($arr1,$arr2,$arr3....functionname);
(4)比较几个数组之间键名和键值,求交集:
array_intersect_assoc($arr1,$arr2,$arr3...);
键名和值都相同才能被保留下来,这个系列与array_diff系列的正好相反
(5)比较几个数组之间键名和键值,求交集(用自定义函数):
array_intersect_uassoc($arr1,$arr2,$arr3....functionname);
(6)比较几个数组之间键名和键值,求交集(用内建函数比较键名,用自定义函数比较键值):
array_uintersect_assoc($arr1,$arr2,$arr3....functionname);
(7)比较几个数组之间键名和键值,求交集(使用自定义函数比较键名和键值):
array_uintersect_uassoc($arr1,$arr2,$arr3....,'functionname1','functionname2');
7.搜索:
(1)array_key_exists('键名',$arr);
返回的是真或假
(2)再数组中搜索某个键值,并返回对应的键名:
$keyname=array_search('键值',$arr,true/false/不写);//in_array()和他是一样的,所以in_array()就不写出来了
当true时,相当于===,类型和数据必须都相等的时候才返回。
如果没有,那就返回false。
8.数组属性:
(1)返回数组的键名:
$keyarr=array_keys($arr,'值名',true);如果指定了第二个参数,那么就要按照键值名来寻找这个键名,返回去;第三个参数默认为false,为true时,相当于===
(2)返回数组的键值:
$valuearr=array_values($arr);
返回键值,形成新数组,键名重组
(3)随机返回的数组的一个键名:
$random_keyarr=array_rand($arr,'键名的个数');
没啥说的,就是返回数组中随机的几个键名而已,返回的是键名所构成的数组,如果就个数是1的话,那就返回的是一个字符串或者整形(就是那个键)。
(4)返回数组的元素的个数:
$numbers=count($arr,0或者1);//sizeof($arr)也可以,sizeof是他的别名
默认是0,不开启递归模式;1的时候开启
(5)返回多维数组某一个索引的全部值:
array_column($arr,'索引名字','不用写或者写索引名字');
最后一个要是写的话,那么新数组的索引就是按照其多维数组里面的数组的其他索引名字,比如说要取的是name,然后最后的参数是id,那么新数组索引就是原来的id
(6)统计一个数组中的值出现的个数,就像是画正字,返回一个新的数组:
array_count_values($arr);
返回的这个数组的键,是原来数组的值,值就是出现的个数。
9.从一个或者多个数组里取值,再用函数处理,处理后形成一个新的数组:
$newarr=array_map('函数的名字',$arr1,$arr2,$arr3....);//函数名要用单引号扩上,不用加()
functionname($v1,$v2,$v3...){
有几个数组输入就处理几个输入的数组的参数
return$result;
}
处理完之后,形成一个新的数组
10.排序:
(1)将索引数组每一项升序排列保存:
sort($arr,参数(可以不写));
注意,他不是以arr_开头的,第二个参数一共有五种:
①SORT_REGULAR,0,默认项,常规排序,按照ASCII排序,不改变类型。
②SORT_NEMERIC,1,把每一项作为数字来处理
③SORT_STRING,2,把每一项作为字符串来处理
④SORT_LOCALE_STRING,3,把每一项作为字符串来处理,基于当前区域设置(可通过setlocale()进行更改)
⑤SORT_NATURAL,4,把每一项作为字符串来处理,使用类似natsort()的自然排序
⑥SORT_FLAG_CASE,5,可以结合(按位或)SORT_STRING或SORT_NATURAL对字符串进行排序,不区分大小写
按照ASCII排序的,所以数字在前,其次大写字母,最后小写字母,执行后若成功返回ture,失败返回false。
原数组被改变。
(2)将索引数组每一项降序排列保存:
rsort($arr,参数(可以不写));
(3)将索引数组每一项排列保存(使用自定义函数):
usort($arr,"functioname");
(4)将关联数组每一项升序排列保存:
asort($arr,参数(可以不写));
这个和sort的区别是处理后的索引依然保留,比较针对关联数组。
(5)将关联数组每一项降序排列保存:
arsort($arr,参数(可以不写));
(6)将关联数组每一项排列保存(使用自定义函数):
uasort($arr,"functioname");
(7)将数组按照键名升序排列保存:
ksort($arr,参数(可以不写));
(8)将数组按照键名降序排列保存:
krsort($arr,参数(可以不写));
(9)将数组按照键名排列保存(使用自定义函数):
uksort($arr,"functioname");
(10)将多个数组进行排序:
array_multisort($arr1,顺序类型,排序类型,$arr2,顺序类型,排序类型……);
这个更强大一些,可以对多个数组进行非一般的操作,其中顺序类型有两种:
SORT_ASC(默认,可不写)和SORT_DESC,他们是ascend和descend。
排序类型和sort()相同,如果不设置这些参数可以直接写数组名
(11)采用“自然排序”算法对数组进行排序:
natsort($arr);
保留原有索引
(12)采用不区分大小写的“自然排序”算法对数组进行排序:
natcasesort($arr);
保留原有索引
(13)随机打乱数组的元素的顺序:
shuffle($arr);
11.对数组的操作:
(1)将数组的值和键反转:
array_flip($arr);
这个没啥说的,挺有意思的。
(2)调换数组顺序:
$newarr= array_reverse($arr,true/false(默认)/不写);
把一个数组的元素的顺序反过来,但是数组里面的数组,就是多层的不能反转。
true代表保留原数组的键名,false不保留。
(3)删除数组中重复的部分:
$newarr=array_unique($arr);
若有好几个重复的值,那么保留第一个,去除剩下的
11.数组元素的操作:
(1)删除数组最后一个元素,并返回这个元素的值:
array_pop($arr);
(2)删除数组第一个元素,并返回这个元素的值:
$value=array_shift($arr);
(3)向数组尾部插入多个元素:
$newArrayLength=array_push($arr,'值1','值2','值3'……);
这个相当于$arr[]='值1';这个操作,所以当用array_push插入一个值的时候,还不如用$arr[]='值1';这种形式效率高。
插入后的元素的键都是数字键。
(4)向数组头部插入多个元素:
$newArrayLength=array_ushift($arr,'值1','值2','值3'……);
插入后,原数组的数字键名将打破重组。
(5)反转数组:
$newarr=array_reverse($arr,true/false(默认)/不写);
把一个数组的元素的顺序反过来,但是数组里面的数组,就是多层的不能反转。
true代表保留原数组的键名,false不保留。
12.计算:
(1)返回数组的乘积:
$product=array_product($arr);
product是乘积的意思。
有字符串的结果都为0。
可以有负数,也可以有浮点型。
空数组的乘积返回1(PHP5.3.6起)
(2)返回数组中的和:
array_sum($arr);
返回数组中所有值的和。
13.向用户自定义函数发送数组中的值,并返回一个字符串:
$string=array_reduce($arr,’’,'发送到函数的初始值(可以没有)');
这就是取数组中的值,处理,返回形成一个字符串。
14.代替:
(1)将后面数组的值替换前面数组的值,这个要根据键来判断是否替代的:
$newarr=array_replace($arr1,$arr2,$arr3....);
如果$arr1中键与$arr2中的键有相同的部分,那么相同的部分被代替,不相同的键$arr1的原样保留,$arr2的创建。
$arr1的和$arr2的对比代替完之后,他们的结果再与$arr3对比代替,以此类推。
(2)递归代替:
$newarr=array_replace_recursive($arr1,$arr2,$arr3....);
recursive是递归的意思。
这个补充了array_replace()的局限,当被代替的数组中包含数组的时候,也就是数组下面还有数组,要实现最里层数组的替换功能,就要用到递归替换。
15.切开数组:
(1)将按照指定位置和长度切开数组:
$newarr=array_slice($arr,起始位置,长度,true/false/不写);
当起始位置为0时,代表从初始切,第一位切进去,如果是2,那就在第2位和第3位中间开始切,第3位切进去;如果是个小数,采取进一法;如果是个负数,代表从后面往前切,比如说-1,就是把倒数第一个切进去。
当长度是个正数的时候,代表切开的长度;当他是负数的时候,代表切到哪里,比如说,-2,代表切到倒数第二项。
最后一个true和false代表是否保留原有键名,默认是不保留,他只针对整型键名。
slice是切的意思
16.从数组中移除元素,并用新元素取代他:
array_splice($arr1,起始位置,长度,$arr2);
与arrary_slice()类似,长度代表从$arr1移除的长度,$arr2可以不写,不写的时候就相当于移除的作用了。
17.对数组的每一个元素使用自定义函数处理:
(1)array_walk($arr,'functionname');
(2)array_walk_recursive($arr,'functionname');
可以对数组中的数组操作,递归
18.数组游标:
(1)返回数组当前元素:
current($arr);//pos($arr)也可以,pos是他的别名
(2)返回数组当前元素的键名:
key($arr);
(3)向下移动数组的指针:
next($arr);
(4)向上移动数组的指针:
prev($arr);
(5)将数组的指针移至最后:
end($arr);
(6)将数组的指针移至开头:
reset($arr);
(7)返回当前元素的键名和键值,并且将指针向下移动:
$array=each($arr);
返回的数组中包括的四个元素:
键名为0,1,key和value。
单元0和key是键名,1和value是数据
(8)把数组的元素依次赋予变量:
list($a1,$a2,$a3……)=$arr;
注意:
只能赋予$arr中的整形索引,非整形的会赋给NULL,出NOTICE提示;赋值的时候是倒序的,先赋给左侧最后一个变量
19.创建:
(1)创建一个包含变量名和他们值的数组:
$arr=compact($var1,$var2,$var3……);
(2)以数组的索引为变量名,以键值为变量值,从数组中依次创建变量:
extract($arr);
返回的是成功创建的变量数目。
这个与compact()正好相反。
(3)创建一个数组,指定他的最小值和最大值:
$arr=range(最小值,最大值,步长);
步长不写的话默认是1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP 数组 函数 讲解