配色: 字号:
PHP数组函数讲解
2016-11-02 | 阅:  转:  |  分享 
  
我把数组的函数,进行了简单的分类,这样能更清晰一些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_recur
sive($arr1,$arr2,$arr3....);与array_merge唯一不同的地方就是,他对于冲突的键名,采取的办法是
,将所有键名相同的值,归拢成一个数组,而且里面的键名从0开始定义,保留每一个值。recursive是递归的意思。4.求差值:(1)
比较几个数组之间的值,返回他们的差值:array_diff($arr1,$arr2,$arr3....);这个差值代表:先比较$a
rr1和$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,$ar
r3....);这个要比较键和值,两个数组的键和值都相同时才可以删去。(5)比较几个数组之间的键和值,返回他们的差值(使用自定义函
数比较键名):array_diff_uassoc($arr1,$arr2,$arr3....,''functionname'');比较
键和值,使用用户自定义的函数来求差值(6)比较几个数组之间的键和值,返回他们的差值(使用内建函数比较键名,使用自定义函数比较键值)
:array_udiff_assoc($arr1,$arr2,$arr3....,''functionname'');(7)比较几个数
组之间的键和值,返回他们的差值(使用自定义函数比较键名和键值):array_udiff_uassoc($arr1,$arr2,$a
rr3....,''functionname1'',''functionname2'');5.填充(1)创建一个数组,用一个值来填充:$a
rr=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,$arr
2,$arr3...);inersect是交叉的意思。这个要根据值来比较,首先把$arr1和$arr2比较,求交集,删去不相交的部
分,形成的数组,再和$arr3来比较...(2)比较几个数组之间的键值,求交集(使用用户自定义函数):array_uinterse
ct($arr1,$arr2,$arr3....,''functionname'');(2)比较几个数组之间的键名,求交集:array
_intersect_key($arr1,$arr2,$arr3...);(3)比较几个数组之间的键名,求交集(用自定义函数):a
rray_intersect_ukey($arr1,$arr2,$arr3....functionname);(4)比较几个数组之
间键名和键值,求交集:array_intersect_assoc($arr1,$arr2,$arr3...);键名和值都相同才能被
保留下来,这个系列与array_diff系列的正好相反(5)比较几个数组之间键名和键值,求交集(用自定义函数):array_int
ersect_uassoc($arr1,$arr2,$arr3....functionname);(6)比较几个数组之间键名和键值
,求交集(用内建函数比较键名,用自定义函数比较键值):array_uintersect_assoc($arr1,$arr2,$ar
r3....functionname);(7)比较几个数组之间键名和键值,求交集(使用自定义函数比较键名和键值):array_ui
ntersect_uassoc($arr1,$arr2,$arr3....,''functionname1'',''functionna
me2'');7.搜索:(1)array_key_exists(''键名'',$arr);返回的是真或假(2)再数组中搜索某个键值,并返
回对应的键名:$keyname=array_search(''键值'',$arr,true/false/不写);//in_arra
y()和他是一样的,所以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)返回数组的元素的个数:$numb
ers=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$re
sult;}处理完之后,形成一个新的数组10.排序:(1)将索引数组每一项升序排列保存:sort($arr,参数(可以不写));注
意,他不是以arr_开头的,第二个参数一共有五种:①SORT_REGULAR,0,默认项,常规排序,按照ASCII排序,不改变类型
。②SORT_NEMERIC,1,把每一项作为数字来处理③SORT_STRING,2,把每一项作为字符串来处理④SORT_LOCA
LE_STRING,3,把每一项作为字符串来处理,基于当前区域设置(可通过setlocale()进行更改)⑤SORT_NATURA
L,4,把每一项作为字符串来处理,使用类似natsort()的自然排序⑥SORT_FLAG_CASE,5,可以结合(按位或)SOR
T_STRING或SORT_NATURAL对字符串进行排序,不区分大小写按照ASCII排序的,所以数字在前,其次大写字母,最后小写
字母,执行后若成功返回ture,失败返回false。原数组被改变。(2)将索引数组每一项降序排列保存:rsort($arr,参数(
可以不写));(3)将索引数组每一项排列保存(使用自定义函数):usort($arr,"functioname");(4)将关联数
组每一项升序排列保存:asort($arr,参数(可以不写));这个和sort的区别是处理后的索引依然保留,比较针对关联数组。(5
)将关联数组每一项降序排列保存:arsort($arr,参数(可以不写));(6)将关联数组每一项排列保存(使用自定义函数):ua
sort($arr,"functioname");(7)将数组按照键名升序排列保存:ksort($arr,参数(可以不写));(8
)将数组按照键名降序排列保存:krsort($arr,参数(可以不写));(9)将数组按照键名排列保存(使用自定义函数):ukso
rt($arr,"functioname");(10)将多个数组进行排序:array_multisort($arr1,顺序类型,排
序类型,$arr2,顺序类型,排序类型……);这个更强大一些,可以对多个数组进行非一般的操作,其中顺序类型有两种:SORT_ASC
(默认,可不写)和SORT_DESC,他们是ascend和descend。排序类型和sort()相同,如果不设置这些参数可以直接写
数组名(11)采用“自然排序”算法对数组进行排序:natsort($arr);保留原有索引(12)采用不区分大小写的“自然排序”算
法对数组进行排序:natcasesort($arr);保留原有索引(13)随机打乱数组的元素的顺序:shuffle($arr);1
1.对数组的操作:(1)将数组的值和键反转:array_flip($arr);这个没啥说的,挺有意思的。(2)调换数组顺序:$ne
warr=?array_reverse($arr,true/false(默认)/不写);把一个数组的元素的顺序反过来,但是数组里
面的数组,就是多层的不能反转。true代表保留原数组的键名,false不保留。(3)删除数组中重复的部分:$newarr=ar
ray_unique($arr);若有好几个重复的值,那么保留第一个,去除剩下的11.数组元素的操作:(1)删除数组最后一个元素,
并返回这个元素的值:array_pop($arr);(2)删除数组第一个元素,并返回这个元素的值:$value=array_s
hift($arr);(3)向数组尾部插入多个元素:$newArrayLength=array_push($arr,''值1'',
''值2'',''值3''……);这个相当于$arr[]=''值1'';这个操作,所以当用array_push插入一个值的时候,还不如用$ar
r[]=''值1'';这种形式效率高。插入后的元素的键都是数字键。(4)向数组头部插入多个元素:$newArrayLength=a
rray_ushift($arr,''值1'',''值2'',''值3''……);插入后,原数组的数字键名将打破重组。(5)反转数组:$new
arr=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,’www.mntuku.cn’,''发送到函
数的初始值(可以没有)'');这就是取数组中的值,处理,返回形成一个字符串。14.代替:(1)将后面数组的值替换前面数组的值,这个要
根据键来判断是否替代的:$newarr=array_replace($arr1,$arr2,$arr3....);如果$arr
1中键与$arr2中的键有相同的部分,那么相同的部分被代替,不相同的键$arr1的原样保留,$arr2的创建。$arr1的和$ar
r2的对比代替完之后,他们的结果再与$arr3对比代替,以此类推。(2)递归代替:$newarr=array_replace_
recursive($arr1,$arr2,$arr3....);recursive是递归的意思。这个补充了array_repla
ce()的局限,当被代替的数组中包含数组的时候,也就是数组下面还有数组,要实现最里层数组的替换功能,就要用到递归替换。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_wal
k_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
献花(0)
+1
(本文系雨亭之东首藏)