<?php
// 查询与替换
// 1. array_slice(数组,开始,长度,bool): 从数组取部分值,并返回
$fruits=["a"=>"apple","b"=>"banana","c"=>"mango","d"=>"watermelon","e"=>"pear","f"=>"strawberry"];
$fruit=array_slice($fruits,0);
printf('<pre>%s</pre>',print_r($fruits,true));
$fruit=array_slice($fruits,2,3);
printf('<pre>%s</pre>',print_r($fruit,true));
$fruit=array_slice($fruits,-3,1);
printf('<pre>%s</pre>',print_r($fruit,true));
// 第三个参数为负数时,表示取到倒数第几,但不包括倒数第几
$fruit=array_slice($fruits,-4,-2);
printf('<pre>%s</pre>',print_r($fruit,true));
// 第四个参数布尔值,是对于索引数组而言的,默认false,索引重置
// array_values()只获取数组的值
$fruits=array_values($fruits);
printf('<pre>%s</pre>',print_r($fruits,true));
$fruit=array_slice($fruits,1,4);
printf('<pre>%s</pre>',print_r($fruit,true));
$fruit=array_slice($fruits,1,4,false);
printf('<pre>%s</pre>',print_r($fruit,true));
$fruit=array_slice($fruits,1,4,true);
printf('<pre>%s</pre>',print_r($fruit,true));
// 2. array_splice(数组,开始,长度,数据):删除数组中的一部分并用其它值代替
// 可以实现对数组的: 删除, 替换/更新, 添加
$numbers=[5,28,90,49,27,80];
printf('<pre>%s</pre>',print_r($numbers,true));
// 删除: 返回被删除元素组成的数组
$number=array_splice($numbers,1,3);
printf('<pre>%s</pre>',print_r($number,true));
$number=array_splice($numbers,-3,-1);
printf('<pre>%s</pre>',print_r($number,true));
// 替换
$numbers=[5,28,63,90,49,27,80];
array_splice($numbers,1,3,[12,13]);
printf('<pre>%s</pre>',print_r($numbers,true));
// 添加
array_splice($numbers,1,0,[12]);
printf('<pre>%s</pre>',print_r($numbers,true));
// 注意:查看删除元素,打印的是array_splice函数;查看当前数组所有元素,打印的是数组。
?>
<?php
// 查询与替换
// array_column(array,column,index_key):返回多维数组中某一单列的值组成的数组
$users=[];
$users[]=['id'=>'101','name'=>'peter','age'=>'10'];
$users[]=['id'=>'102','name'=>'bill','age'=>'14'];
$users[]=['id'=>'103','name'=>'alice','age'=>'12'];
printf('<pre>%s</pre>',print_r($users,true));
$names=array_column($users,'name');
printf('<pre>%s</pre>',print_r($names,true));
// 第三个参数用于重置返回数组的键
$names=array_column($users,'name','id');
printf('<pre>%s</pre>',print_r($names,true));
// 第二个参数为空时,默认多维数组所有列,即返回整个数组
printf('<pre>%s</pre>',print_r(array_column($users,null,'id'),true));
// 第二个参数,可以是关联数组中某一列的键,也可以是索引数组中某一列的索引
$a=[];
$a[]=[1,'a','A'];
$a[]=[2,'b','B'];
$keys=array_column($a,'1');
printf('<pre>%s</pre>',print_r($keys,true));
// array_intersect(array1,array2...):返回多个数组值的交集组成的数组,键名与第一个数组键名一致
$a=[1,'a','b',4,'love','g'];
$b=[2,'b','3','g','hello','love'];
$result=array_intersect($a,$b);
printf('<pre>%s</pre>',print_r($result,true));
// array_intersect_assoc(array1,array2...):返回多个数组值和键名都一致组成的数组,键名不变
$a=[1,'a','b',4,'love','g'];
$b=[2,'3','b','g','love','hello'];
$result=array_intersect_assoc($a,$b);
printf('<pre>%s</pre>',print_r($result,true));
// array_diff(array1,array2...):返回多个数组比较差集组成的数组,键名与第一个数组键名一致
// 差集是第一个数组里除了交集剩下的元素
$a=[1,'a','b',4,'love','g'];
$b=[2,'3','b','g','love','hello'];
$result=array_diff($a,$b);
printf('<pre>%s</pre>',print_r($result,true));
// 分割与合并
// array_merge():合并为新数组
// 相同值仍多次存在
$color1=['a'=>'red','b'=>'pink','c'=>'yellow'];
$color2=['d'=>'black','e'=>'gray','f'=>'yellow'];
$result=array_merge($color1,$color2);
printf('<pre>%s</pre>',print_r($result,true));
// 键名相同时,最后的一个值覆盖之前所有键名相同的值
$color1=['a'=>'red','b'=>'pink','c'=>'yellow'];
$color2=['d'=>'black','c'=>'gray'];
$result=array_merge($color1,$color2);
printf('<pre>%s</pre>',print_r($result,true));
// array_chunk(array,size,bool):把一个数组分割为新的数组块
// 第三参数bool,默认false键名重置
$color=['a'=>'red','b'=>'pink','c'=>'yellow','d'=>'black'];
$result=array_chunk($color,2);
printf('<pre>%s</pre>',print_r($result,true));
$result=array_chunk($color,2,false);
printf('<pre>%s</pre>',print_r($result,true));
$result=array_chunk($color,2,true);
printf('<pre>%s</pre>',print_r($result,true));
// // 自动生成
// range(start,stop,step)创建一个整数列表
// 默认步长为1
printf('<pre>%s</pre>',print_r(range(0,5),true));
printf('<pre>%s</pre>',print_r(range(0,5,2),true));
// 支持负数
printf('<pre>%s</pre>',print_r(range(-3,-6,1),true));
// array_fill(index,number,value)用给定的键值填充数组
$fruit=array_fill(4,3,'apple');
printf('<pre>%s</pre>',print_r($fruit,true));
//类型转换
// extract(array,extract_rules,prefix):从数组中将变量导到当前符号表中(数组->变量)
$user=['id'=>'102','name'=>'bill','age'=>'14'];
extract($user);
// 数组键名为变量名,数组键值为变量值
// 双引号会解析变量,双引号内变量名需转义,在变量名前加\
echo "\$id=$id,\$name=$name,\$age=$age".'<br>';
// 第二个参数extract_rules:对不合法和冲突的键名的处理
$user=['0'=>'102','2name'=>'bill','age'=>'14'];
// EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀prefix
//第三个参数prefix:一定情况下出现,加在不合法或数字或冲突的变量名前,变成合法或不冲突变量名
$user=['0'=>'102','2name'=>'bill','age'=>'14'];
extract($user,EXTR_PREFIX_INVALID,"a");
echo "\$a_0=$a_0,\$a_2name=$a_2name,\$age=$age".'<br>';
$id=103;
$user=['id'=>'102','name'=>'bill','age'=>'14'];
extract($user,EXTR_PREFIX_SAME,"a");
echo "\$id=$id,\$a_id=$a_id,\$name=$name,\$age=$age";
// compact():创建一个包含变量名和它们对应的值的关联数组
$id=103;
$name='alice';
$age=12;
$result=compact('id','name','age','grade');
// 没有对应变量名的字符串会被自动忽略
printf('<pre>%s</pre>',print_r($result,true));
?>
<?php
// 1、array_filter(): 用回调函数过滤数组中的元素,返回计算结果为true的元素组成的数组
function age_range($a){
if($a<50&$a>18){
return true;}
else{
return false;
}
}
$array=[5,7,26,19,58,46];
// 键名不变
printf('<pre>%s</pre><hr>', print_r(array_filter($array,"age_range"), true));
// 2、array_map(): 为数组中的每个元素应用回调函数进行处理,返回新数组
$a=['sport',[1,'a','b'],'5.5','旅游'];
// 拉平数组
$b=function($i){
switch (gettype($i)){
case 'array':
$i=implode(',',$i);
}
return $i;};
printf('<pre>%s</pre><hr>', print_r(array_map($b,$a), true));
// 回调函数可以为null
$a=[1,'a'];
$b=[2,'b'];
$result=array_map(null,$a,$b);
printf('<pre>%s</pre><hr>', print_r($result, true));
// 3、array_walk(): 使用自定义回调对数组中成员逐个处理,返回布尔值
// array_walk(数组, 回调函数,回调函数的第三个数组的默认值)
$user=['id'=>'101','name'=>'peter','age'=>'10'];
// 回调函数,第一个参数是数组值,第二个参数是键名。(顺序不能颠倒)
function myfunction($value,$key,$mark){
echo "用户的{$key} {$mark} {$value}<br>";
}
array_walk($user,"myfunction",':');
// 4、array_reduce(): 迭代处理数组元素
$array=[5,7,26,19,58,46];
echo array_reduce($array,function($a,$b){
return $a.'~'.$b;
});
echo '<br>';
// 第三个参数作为初始值处理
$array=[5,7,26,19,58,46];
echo array_reduce($array,function($a,$b){
return $a.'+'.$b;
},4);
echo '<br>';
// 注意与上面的区别
$array=[5,7,26,19,58,46];
echo array_reduce($array,function($a,$b){
return $a+$b;
},4);
?>
作业总结:看视频讲解感觉好像懂了,自己动手一写才发现不会,没有理解透彻,还得再投入时间去学习,还发现以前有的个别知识又忘了怎么用。可能短时间学太多,消化吸收不了,也缺乏练习应用。