学习总结
- 使用数组函数可以轻松取到数组中的键和值
- 使用数组函数可以轻松查找数组中的键和值
- 使用数组函数可以对数组的键或值进行排序
- 使用数组函数中的回调函数可以对数组中的所有元素进行复杂的逻辑处理
<?php
//1.array_chunk(需要分割的数组,分割后每个数组的元素个数)数组分割函数
$courseArr = [89,90,78,67];
$courseGrade =array_chunk($courseArr,2) ;//返回多个数组
printf('<pre>%s</pre>',print_r($courseGrade,true));
//2.array_column(需要处理的数组,需要返回的键名)返回数组中指定一列的值,返回值是一个数组
$grade = [
['name' => 'angle','chinese' => 98,'math' => 87,'english' => 76],
['name' => 'Eric','chinese' => 98,'math' => 87,'english' => 74],
['name' => 'hugn','chinese' => 94,'math' => 77,'english' => 86],
['name' => 'peter','chinese' => 98,'math' => 57,'english' => 76],
['name' => 'Lucy','chinese' => 92,'math' => 87,'english' => 66],
];
// printf('<pre>%s</pre>',print_r($grade,true));
$chineseGrade = array_column($grade,'chinese');//返回所有同学的语文成绩
printf('<pre>%s</pre>',print_r($chineseGrade,true));
//3.array_key_exists(要查找的键名,要查找的数组)检查数组中是否存在指定的键名
$StuGrade = ['name' => 'angle','chinese' => 98,'math' => 87,'english' => 76];
if (array_key_exists('php',$StuGrade)):
echo $StuGrade['name'],'php成绩为:',$StuGrade['php'];
else:
echo $StuGrade['name'],'不存在php成绩';
endif;
//4.array_diff()返回两个数组的差集
$fruitArr1 = ['apple','pear','banana','Strawberry','peach'];
$fruitArr2 = ['apple','pear','peach'];
$fruitArr = array_diff($fruitArr1,$fruitArr2);//返回在第一个数组,但是不在第二个数组中的数据返回'banana','Strawberry'
printf('<pre>%s</pre>',print_r($fruitArr,true));
//5.array_diff_key()根据键名计算差集
$stu1 = ['name' => 'angle','chinese' => 98,'math' => 87,'english' => 76];
$stu2 = ['name' => 'Eric','chinese' => 98];
$stu = array_diff_key($stu1,$stu2);//返回'math' => 87,'english' => 76
printf('<pre>%s</pre>',print_r($stu,true));
//6.array_fill_keys()使用指定的键和值来填充数组
$keyStr = ['chinese','math','english','php','mysql','html'];
$valueStr = 0;
$stuGrade = array_fill_keys($keyStr,$valueStr);//用指定的值填充指定键名,如果值也是一个数组,则返回一个二维数组
printf('<pre>%s</pre>',print_r($stuGrade,true));
//7.array_intersect 返回两个数组的交集
$fruitArr1 = ['apple','pear','banana','Strawberry','peach'];
$fruitArr2 = ['apple','pear','peach'];
$fruitArr = array_intersect($fruitArr1,$fruitArr2);//返回在第一个数组,但是不在第二个数组中的数据返回'apple','pear','peach'
printf('<pre>%s</pre>',print_r($fruitArr,true));
//8.array_intersect_assoc() 返回两个数组的交集,键名也比较
$stu1 = ['name' => 'angle','chinese' => 98,'math' => 87,'english' => 98];
$stu2 = ['name' => 'Eric','chinese' => 98];
$stu = array_intersect_assoc($stu1,$stu2);//返回'chinese' => 98键和值都相等才可以
printf('<pre>%s</pre>',print_r($stu,true));
//9.array_merge 合并多个数组
$stu1 = ['name' => 'angle','chinese' => 98,'math' => 87,'english' => 98];
$stu2 = ['name' => 'Eric','chinese' => 87];
$stu = array_merge($stu1,$stu2);//合并数组,如果键名相同,则该键名对应的是最后一个数组中的值
printf('<pre>%s</pre>',print_r($stu,true));
//10.array_rand()随机返回数组中的一个或多个键名
$fruitArr1 = ['apple','pear','banana','Strawberry','peach'];
$fruitArr = array_rand($fruitArr1,3);//随机返回数组中的3个键级成一个数组
//根据这个随机键名可以访问到该数组的随机值
echo $fruitArr1[$fruitArr[0]],'<br>',$fruitArr1[$fruitArr[1]],'<br>',$fruitArr1[$fruitArr[2]],'<br>';
//11.array_slice()函数 在数组中取出指定位置的数组元素
$stu1 = ['name' => 'angle','chinese' => 98,'math' => 87,'english' => 76];
$stu = array_slice($stu1,1,3);//返回数组中从第二个开始的3个数组元素'chinese' => 98,'math' => 87,'english' => 76
printf('<pre>%s</pre>',print_r($stu,true));
//12.array_splice()函数 删除并替换指定数组元素的值
$stu1 = ['name' => 'angle','chinese' => 98,'math' => 87,'english' => 76];
$grade = ['chinese' => 88,'math' => 89,'english' => 78];
$stu = array_splice($stu1,1,3,$grade);//返回被删除的数组元素,替换数组直接替换原数组的数据,不保留键名
printf('<pre>%s</pre>',print_r($stu1,true));
//数组元素的回调函数
//1.array_filter()过虑数组中的键或键和值
$stu1 = ['name' => 'angle','chinese' => 98,'math' => 87,'english' => 76];
$chiGrade = array_filter($stu1,function($k){//使用回调只返回语文成绩
return $k=='chinese';
},ARRAY_FILTER_USE_KEY);
printf('<pre>%s</pre>',print_r($chiGrade,true));
$stu1 = ['name' => 'angle','chinese' => 68,'math' => 87,'english' => 76];
$chiGrade = array_filter($stu1,function($v,$k){//使用回调返回语文成绩或者成绩大于80的科目
return $k=='chinese' || $v>80;
},ARRAY_FILTER_USE_BOTH);
printf('<pre>%s</pre>',print_r($chiGrade,true));
//1.array_reduce()用回调函数迭代的将数组元素简化为单一的值
$arr = [1,2,3,4,5];
$sum = array_reduce($arr,function($sum,$item){//第1次调用$sum=100,$item=1 返回101
$sum+=$item; //第2次调用$sum=101,$item=2 返回103
return $sum; //第3次调用$sum=103,$item=3 返回106
},100); //第4次调用$sum=106,$item=4 返回110
echo $sum,'<br>'; //第5次调用$sum=110,$item=5 返回115
//1.array_map()//用回调函数处理每个数组中的每个元素
$arr1 = [1,2,3,4,5];
$arr2 = [2,4,6,8,10];
$arr3 = [1,3,5,7,9];
$arr = array_map(function($v1,$v2,$v3){
return $v1+$v2+$v3;
},$arr1,$arr2,$arr3);
printf('<pre>%s</pre>',print_r($arr,true));
//1.array_walk()//可以对数组中的所有值和键做回调
$stu1 = ['name' => 'angle','chinese' => 98,'math' => 87,'english' => 76];
array_walk($stu1,function($v,$k){
echo $k,'=>',$v,'<br>';
})
?>
- 运行效果图
Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:关于回调函数, 知道他们的用途, 如果想得到一个新数组,用array_map(), 如果只是对原数组进行格式化,用array_walk(), 如果想过滤掉数组中的某些数据, 用array_filter(), 但是实际中, 却同一个功能有多个数组可用的