PHP数组函数总结与使用

array_change_key_case(数组,CASE_LOWER/CASE_UPPER)
数组键值转化为小写CASE_LOWER/大写CASE_UPPER
 
array_chunk(数组,分割后每个子数组里元素个数,true/false)
分割数组,第三个参数为true-保留原始数组中的键名 false-默认 从0开始的新数组索引
 
array_column(二维数组,key,other_key可选参数)
返回二维数组中的某一列,key和other_key对应的值,组成新的other_balue=>value数组
 
array_combine(键名数组,键值数组)
通过合并两个数组来创建一个新的数组,数组不可以为空,数组长度不可不同,否则返回false
这个数组函数在以小时为单位,统计访问量的时候用过
 
array_count_values(一维数组)
返回以每个元素的值为key,元素个数为value的新的数组.
 
array_diff(数组1,数组2,数组3.....)
返回在数组1中有,但是在数组2数组3...中没有的,数组的值构成的数组
 
array_diff_assoc(数组1,数组2,数组3.....)
和array_diff相比,除了比较数组的值还比较数组的键,返回差集
 
array_diff_key(数组1,数组2,数组3...)
比较数组的键,返回差集
 
array_intersect(arr1,arr2,arr3.......)
比较数组的键值并返回交集.需要注意的是这里交集指的意思是,同时存在于数组1,2,3中的值,返回新的数组,键名以数组1的为准
 
array_intersect_assoc(arr1,arr2,arr3.......)
比较数组的键名和键值并返回交集
 
array_intersect_key(arr1,arr2,arr3.......)
比较数组的键名,并返回交集
以上三种比较最终返回的都是数组1中的键值对,只不过比较的类型不同
 
数组比较函数,返回的都是在数组1中存在的键值对,但是比较类型有所不同
(1)比较数组的值
(2)比较数组的键
(3)比较数组的键和值
 
array_fill(index1,number填充个数,填充的元素)
定义数组.用给定的值填充数组,填充个数number
 
array_combine和array_combine配合使用过滤敏感词汇
(1)敏感词汇组成的数组
$badword = array('张三','张三丰','张三丰田');
 
(2)敏感词汇转换成键,替代敏感词汇的*为值
$badword1 = array_combine($badword,array_fill(0,count($badword),'*'));
//Array ( [张三] => * [张三丰] => * [张三丰田] => * )
 
(3)通过strtr函数将敏感词汇替换
$bb = '我今天开着张三丰田上班';
$str = strtr($bb, $badword1);
echo $str;//我今天开着*上班
 
strtr字符串替换函数的两种用法
(1)strtr(string,from,to)
把string字符串里的from替换成to,需要注意的是from=>to f都替换成t,r都替换成0,om没有可替换的,不变,因为to就两个长度
(2)strtr(string,array)
将array中的键名出现在string中的,统一替换成键名对应的键值
 
如果只是简单地替换某一个敏感词汇,一个strtr函数就够了,如果是替换很多敏感词汇,除了用第二种方式外,有时候还需要配合数组函数,因为用于替换的可能不止是*
 
判断一个string中是否有某一些词汇
(1)将需要检索的词汇拼接成字符串
$hei=array('中国','日本');
$blacklist="/".implode("|",$hei)."/i";
 
(2)匹配string中是否出现这些词汇
$str="中国一是一个很好的国家";
if(preg_match($blacklist, $str, $matches)){
print "found:". $matches[0];
} else {
print "not found.";
}
 
array_fill_keys(array作为键名的数组,value要填充的值)
键名数组的键值将作为新数组的键名
所以过滤敏感词汇的第二步就可以:
由$badword1 = array_combine($badword,array_fill(0,count($badword),'*'));
改为$badword1 = array_fill_keys($badword,'*')
 
一千个人中随机选出1,2,3等奖,可以理解为在1000-n个空数组中随机插入n个获奖人员
(1)制造出包含30个元素的数组,包含未中奖和中奖人员
一等奖1个 = array_fill(0,1,1)
二等奖2个 = array_fill(0,2,2)
三等奖3个 = array_fill(0,3,3)
不中奖24个 = array_fill(0,24,0) 共计30人,有6人可中奖
$arr = array_merge(一等奖,二等奖,三等奖,不中奖)
(2)数组合并以后,需要把顺序打乱
shuffle($arr)
最终随机选出1等奖2等奖3等奖.shuffle(英文意思洗牌/调动/换位置)
 
array_filter(数组,回调函数)
回调函数过滤掉数组中的元素(也可以理解为过滤出数组中的元素)
回到上一个抽奖的问题中,如何把1,2,3等奖过滤出来,拿出他们的编号呢?
function getWinning($a){
if($a == 1 || $a == 2 || $a == 3){
return 1;
}else{
return 0;
}
}
$win = array_filter($arr, 'getWinning')
最终通过自定义函数将中奖的过滤出来
Array ( [3] => 3 [8] => 3 [11] => 3 [12] => 2 [17] => 2 [18] => 1 )
 
array_flip(array)
反转数组,将数组的键和值互换.需要注意的是,如果一个值存在多个,那么最后一个键名将作为反转后的值.
 
array_key_exists(key,array)
判断key是否存在数组中
需要注意的是:根据microtime(true)计算出来的时间,在执行效率方面
isset > array_key_exists > in_array
备注:在数据量小的时候,isset和array_key_exists效率差别不大
 
array_keys(arr,指定的值可选参数,true/false)
返回包含数组中所有键名的新数组(索引数组)
第二个参数是只返回指定值的键名
第三个参数是基于第二个参数的,如果是true,键值将以===对比,反之则为==对比
 
array_map(function,array1,array2....)
函数作用于数组中的值,返回新的值组成的数组
 
array_merge(arr1,arr2,arr3)
将多个数组合并成一个数组.
(1)当数组中的键名一样的时候,最后的键值以arr3(后面的数组)的为准
(2)当只有一个数组的时候,而且数组的键名是数字,将返回index从0开始的数组
在合并的这些数组中所有没有键名的值,将从0开始作为key依次递增
 
array_merge_recursive(arr1,arr2,arr3....)
当键名一样的时候,将键名相同的值重新组成一个索引数组
Array ( [a] => red [b] => Array ( [0] => green [1] => yellow ) [c] => blue )
 
array_pad(arr,size,value)
将指定数值插入数组中,并返回长度为size的新数组,原数组键值不变
size的绝对值如果小于arr的长度,则直接返回arr,不会插入value
如果size的值为负数,则会在arr的头部插入指定值
 
array_pop(arr)
删除数组中的最后一个元素,返回删除的元素
如果是空数组直接返回null
 
array_shift(arr)
删除数组中的第一个元素,返回删除的元素
如果数组是空直接返回null
 
array_push(arr, value1, value2...)
在数组的尾部插入值
 
array_unshift(arr, value1, value2...)
在数组的头部插入值
 
array_product(arr)
返回数组中所有元素的乘积,字符串将被视为0
 
array_sum(arr)
返回数组中所有值的和
 
array_rand(arr, number)
从数组中随机返回一个或多个元素.
number>0的时候返回的是有多个随机值组成的数组
 
array_reduce(arr, function, 发送到函数的初始值可选)
向用户自定义函数发送数组中的值,并返回一个字符串
类似implode,但是可选择性更多
 
array_replace(arr1,arr2,arr3....)
后面数组取代(键名相同的)前面数组的值
如果一个键存在于第二个数组 array2,但是不存在于第一个数组 array1,则会在第一个数组 array1 中创建这个元素
 
array_replace_recursive(arr1, arr2, arr3...)
递归地使用后面数组的值取代前面数组的值
 
sort根据数组的值进行升序排序,生成的新数组会赋予从0开始的索引
rsort根据数组的值进行降序排序,生成新数组会赋予从0开始的索引
asort/arsort用法和sort/rsort类似,只是asort/arsort会保留原有索引关系
ksort根据数组的键名进行升序排序,生成的新数组沿用之前的键名不变
krsort根据数组的键名进行降序排序,生成的新数组沿用之前的键名不变
 
array_multisort(arr1,升序/降序,排序类型,数组2,升序/降序,数组2的排序类型....)
对多个数组进行排序
排列顺序:SORT_ASC升序 SORT_DESC降序 默认为升序
排序类型:默认SORT_REGULAR 把每一项按常规顺序排列(Standard ASCII)
 
$a=array(100,2, 4, 7, 7);
$b=array(ab, ac,ad,ag,ap);
array_multisort($a,SORT_NUMERIC,SORT_DESC,$b,SORT_STRING,SORT_ASC);
print_r($a);//Array ( [0] => 100 [1] => 7 [2] => 7 [3] => 4 [4] => 2 )
print_r($b);//Array ( [0] => ab [1] => ag [2] => ap [3] => ad [4] => ac )
多数租排序数组的长度还必须一样,否则会报错
数组2会按照数组1的索引顺序,排列自己的元素
 
array_reverse(arr, true/false)
反转数组,如果第二个参数为true,则保留原有键名,否则索引从0重新排序
 
array_search(value, arr, true/false可选)
在数组中搜索某个键值,并返回键名.需要注意的是,当value存在多个时,返回第一次检索到的键名,当第三个可选参数为true时,value的匹配为===(全等)
array_search()和in_array()用法类似,如果未查询到,将会返回false
 
array_slice(arr,index,length可选,true/false可选)
从数组中取出一段值.第四个参数为true则保留键名,第二个参数如果为负数,则从倒数第index个开始取值.
 
array_splice(arr1, start, length可选, arr2可选)
移除并替换arr1中的元素,返回被删除元素的数组 如果length为0,则将从start处,插入arr1中的元素,start表示数组索引index
 
array_nuique(arr, sortingtype可选)
一般用于一维数组去重,第二个参数为可选
如果是二维数组去重,第二个参数为SORT_REGULAR,键名键值完全相同的子数组元素才会被去重,如果想去重的二维数组只是去掉重复的值不包含键名,那么一般需要将二维数组降维,然后再去重
 
array_values(arr)
返回数组中的值,索引将从0开始递增.备注:也适用于二维数组
 
array_walk(arr, function, 自定义function的参数/可选)
对数组中的每个元素应用回调函数.如果成功返回true,否则返回false
 
$var1 = 12
$var2 = 13
compact(var1, var2...)
创建一个以变量名为键名,变量值为键值的关联数组.如果参数为数组,那么数组中的值将作为变量名,来获取值. 允许var变量不存在
 
current(arr)
返回数组内部指针指向的元素,初始指向插入到数组中的第一个元素
 
shuffle(arr)
将数组打乱
 
 
 
 
 
 
 
 
 
 
 
 

posted on 2019-06-02 20:11  编程是个无底洞  阅读(485)  评论(0编辑  收藏  举报

导航