数组定义与函数
<?php
$students = [];
$students[] = ["学号"=> 10000 ,"姓名"=>'张三',"语文"=>80,"数学"=>50,"英语"=>90];
$students[] = ["学号"=> 10001 ,"姓名"=>'小明',"语文"=>80,"数学"=>90,"英语"=>70,"备注"=>"跳级"];
$students[] = ["学号"=> 10002 ,"姓名"=>'韩梅',"语文"=>90,"数学"=>80,"英语"=>90];
//printf('<pre>%s</pre>',print_r($students,true));
//从数组中取出一部分
//function array_slice (array $array, $offset, $length = null, $preserve_keys = false) {}
print_r (array_slice($students[1],1,2));
echo '<br>';
print_r (array_slice($students[1],3,-1));
echo '<br>';
//替换
//function array_splice (array &$input, $offset, $length = null, $replacement = null) {}
//得到被去掉的数组
$array1 = array_splice($students[2],2,3,[70,85,95]);
print_r($array1);
echo '<br>';
//被替换后的数组,替换部分的键名会被重置
printf('<pre>%s</pre>',print_r($students,true));
echo '<br>';
//计算数组的交集,只比较值,
//function array_intersect(array $array1, array $array2, array $_ = null) { }
$array2 = array_intersect($students[0],$students[1]);
print_r($array2);
echo '<br>';
//计算数组的交集,值和键名都比较,
//function array_intersect_assoc(array $array1, array $array2, array $_ = null) { }
$array3 = array_intersect_assoc($students[0],$students[1]);
print_r($array3);
echo '<br>';
//计算数组的差集
$array4 = array_diff($students[0],$students[1]);
print_r($array4);
echo '<br>';
//计算数组的差集,值和键名一起比较
$array5 = array_diff_assoc($students[0],$students[1]);
print_r($array5);
echo '<br>';
//数组合并,相同键名直接覆盖
$array6 = array_merge($students[0],$students[1]);
print_r($array6);
echo '<br>';
//与键相关
//获取所有键名组成的数组
$array7 = array_keys($students[0]);
print_r($array7);
echo '<br>';
//是否存在指定键名
echo array_key_exists("语文",$students[1]);
echo '<br>';
var_dump (array_key_exists("备注1",$students[1]));
echo '<br>';
//获取第一个键名,最后一个键名
echo array_key_first($students[1]);
echo '<br>';
echo array_key_last($students[1]);
echo '<br>';
//从数组中随机取出一个或者多个元素,得到键名
print_r (array_rand($students[1],2));
回调函数
array_filter()
- 该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回给结果数组。数组键名保持不变。
<?php
$student = ["学号"=> 10000 ,"姓名"=>'张三',"语文"=>80,"数学"=>50,"英语"=>90];
//返回 成绩,0-100数字
function num($input){
return $input>0 && $input<=100;
}
// array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
$array8 = array_filter($student ,"num");
print_r($array8);
array_map()
- 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新的值的数组。可以向函数输入一个或者多个数组。
<?php
$student = ["学号"=> 10000 ,"姓名"=>'张三',"语文"=>80,"数学"=>50,"英语"=>90];
//给每一科的分数都加10分
function num($input){
if ($input>0 && $input<=100){
$input +=10;
};
return $input;
}
//function array_map($callback, array $arr1, array $_ = null) { }
$array9 = array_map("num",$student);
print_r($array9);
<?php
$student = ["学号"=> 10000 ,"姓名"=>'张三',"语文"=>80,"数学"=>50,"英语"=>90];
$student2 = ["学号"=> 10002 ,"姓名"=>'韩梅',"语文"=>90,"数学"=>80,"英语"=>90];
//多个数组,比较相同元素
function num($v1,$v2){
if($v1 === $v2 ){
return "same";
}else {
return "diff";
}
}
print_r(array_map("num", $student, $student2));
array_reduce()
- 函数发送数组中的值到用户自定义函数,并返回一个字符串。如果数组是空的或者初始值未传递,该函数返回 NULL。
<?php
//给reduce去使用叠加*10
function to10($x, $y){
return $x * 10 + $y;
}
//给map去使用通过字符串作为键,获取int值
function char2num($s) {
$DIGITS = ['0'=> 0, '1'=> 1, '2'=> 2, '3'=> 3, '4'=> 4, '5'=>5, '6'=> 6, '7'=> 7, '8'=>8, '9'=> 9];
return $DIGITS[$s];
}
//字符串转换为数组
function str2int($s){
$array = str_split($s,1);
return array_reduce( array_map("char2num", $array) ,"to10" );
}
var_dump (str2int("1314520"));
array_walk()
- 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。
- 可以通过把用户自定义函数中的第一个参数指定为引用:&$value,来改变数组元素的值
<?php
//将满足条件的值清0
function myfunction(&$value,$key)
{
if ($value>0 && $value<=100){
$value = 0;
}
}
//重置学生的分数,不改变键名
$students = ["学号"=> 10000 ,"姓名"=>'张三',"语文"=>80,"数学"=>50,"英语"=>90];
array_walk($students,"myfunction");
print_r($students);
?>
总结
- 数组可以通过数组函数,快速的增删改查,也可以和字符串相互转换
- 回调函数,可以将函数作用在数组上,实现将数组元素改变成为我们想要的内容。
- 根据数组函数的作用,将函数分类,方便对比记忆。