Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:许多功能,如果你不知有这样一样函数数组,可能会写半天的
<?php
// 数组函数实例
// 与键值相关函数
// 1.获取所有键名的数组
$arr1 = ['姓名'=>'樊振东','性别'=>'男','拍型'=>'横拍','排名'=>'1','主项1'=>'男单','主项2'=>'男双'];
$res1 = array_keys($arr1);
printf('获取所有键名的数组 :<pre>%s</pre>',print_r($res1,true));
echo '<hr>';
// 2.是否存在指定键名 array_key_exists(key,array)
$arr2 = ['姓名'=>'陈梦','性别'=>'女','拍型'=>'横拍','排名'=>'1','主项1'=>'女单','主项2'=>'女双'];
$query1 = '排名';
$res2 = array_key_exists($query1, $arr2);
// 判断是否存在指定的键名
if ($res2)
{ echo '存在键名 :' . $query1;}
else
{ echo '不存在键名 :' . $query1;};
echo '<br>';
$query2 = '配偶';
$res2 = array_key_exists($query2, $arr2);
if ($res2)
{ echo '存在键名 :' . $query2;}
else
{ echo '不存在键名 :' . $query2;};
echo '<hr>';
// 3.获取第一/最后一个数组
$arr3 = ['姓名'=>'刘诗雯','性别'=>'女','拍型'=>'横拍','排名'=>'2','主项1'=>'女单','主项2'=>'混双'];
$res3 = array_key_last($arr3);
$res31 = array_key_first($arr3);
echo '最后一个键名 :' . $res3,'<br>';
echo '第一个键名 :' . $res31,'<hr>';
// 与值相关的数组函数
// 4.检查数组是否存在某个值:in_array(key,array)
$arr4 = ['姓名'=>'许昕','性别'=>'男','拍型'=>'竖拍','排名'=>'5','主项1'=>'男单','主项2'=>'混双'];
$res4 = in_array('男双',$arr4);
if($res4){
echo '存在键值 :'.'男双';
}else{
echo '不存在键值 : '.'男双';
}
echo '<hr>';
// 5.搜索指定的值,返回对应的键名:array_search(key,array)
echo array_search(1,$arr1),'<hr>';
// 6.删除重复的值
$arr6 = ['姓名'=>'马龙','性别'=>'男','拍型'=>'竖拍','排名'=>'6','主项1'=>'男单','主项2'=>'男单'];
printf('原数组:<pre>%s</pre>',print_r($arr6,true));
echo '<br>';
printf('删除重复值:<pre>%s</pre>',print_r(array_unique($arr6),true));
echo '<hr>';
// 数组合并
// 7.合并2个数组,分别是$arraykey、$arrayval.
$arrkey = ['姓名','性别','拍型','排名','主项1','主项2'];
$arrval = ['王曼昱','女','横拍','6','女单','女双'];
$res11 = array_combine($arrkey,$arrval);
printf('<pre>%s</pre>',print_r($res11,true));
echo '<hr>';
// 8.把多个数组合并为一个数组:array_merge
$res12 = array_merge($arr1,$arr2,$arr3);
// 结果是最后一个数组的$arr3的值
printf('<pre>%s</pre>',print_r($res12,true));
echo '<hr>';
// 9.把一个数组分割成2个元素组成的数组
$res13 = array_chunk($arr3,2);
printf('<pre>%s</pre>',print_r($res13,true));
echo '<hr>';
// 10.数组指针当前元素的值,第一次查都是第一个值
$res14 = current($arr1);
var_dump($res14);
printf('<pre>%s</pre>',print_r($res14,true));
<?php
// 回调函数
// 1.array_filter():过滤数组中的元素,返回值为true的数组元素。
$arr1 = [99,'best',true,[1,6,8],(new class{}),0,'0','',null,false];
printf('过滤前的数组:<pre>%s</pre>',print_r($arr1,true));
$res = array_filter($arr1);
printf('过滤后的数组:<pre>%s</pre>',print_r($res,true));
// 返回标量即单值元素的数组:
$res1 = array_filter($arr1,function($res2){
return is_scalar($res2);
});
printf('过滤非单值元素后的数组:<pre>%s</pre>',print_r($res1,true));
// 2.把数组、对象的元素、属性转换为字符串
$arr2 = [99,'best',true,[1,6,8],(new class{public $name='名称';public $totel = '9999';}),0,'0','',null,false];
$res2 = array_map(function($item){
// 将对象和数组转换/拉平
switch (gettype($item)) {
case 'object':
$item = get_object_vars($item);
case 'array':
$item = implode(', ', $item);
}
return $item;
}, $arr2);
printf('转换非单值元素后的数组:<pre>%s</pre>',print_r($res2,true));
<?php
// array_map(): 同时处理多个数组
$key = ['host', 'username', 'password'];
$values = ['localhost', 'root', '123456'];
$res = array_map(function($value1, $value2)
{
return [$value1 => $value2];
}, $key, $values);
printf('<pre>%s</pre><hr>', print_r($res, true));
// 3. array_reduce(): 迭代处理数组元素
$res=array_reduce($res, function($prev, $current){
// 获取当前元素的键
$key = key($current);
// 获取当前元素的值
$value = current($current);
// 拼装成键值对
$prev[$key] = $value;
return $prev;
});
printf('内置的数组迭代:<pre>%s</pre><hr>', print_r($res, true));
// 4. array_walk(): 使用自定义回调对数组中成员逐个处理,返回布尔值
// 主要用于数组成员 的格式化, 不受数组指针影响
$res = ['id'=>8, 'name'=>'admin', 'email'=>'admin@php.cn'];
// array_walk(数组, 回调,回调的第三个数组的默认值)
array_walk($res, function($value, $key, $color) {
printf('[ %s ] => <span style="color:%s">%s</span><br>',$key,$color, $value );
},'pink');
<?php
// array_slice($array,offset,lenght,flag)取出指定数组元素
$arr1 = ['姓名'=>'樊振东','性别'=>'男','拍型'=>'横拍','排名'=>'1','主项1'=>'男单','主项2'=>'男双'];
// // 取数组第1至6的元素,及全部元素
// $res1 = array_slice($arr1,0);
// // 取数组第3至5的元素
// $res1 = array_slice($arr1,2,2);
// // 取数组倒数第3至倒数第1个的元素
// $res1 = array_slice($arr1,-3,2);
// // 取数组第3至5的元素
// $res1 = array_slice($arr1,2,2);
// // 取数组第2至5之间的元素
// $res1 = array_slice($arr1,1,-1);
// // 取数组第2至5之间的元素,键名不改变
// $res1 = array_slice($arr1,1,-1,false);
// // 取数组第2至5之间的元素,键名改变
$res1 = array_slice(array_values($arr1),1,-1,true);
printf('<pre>%s</pre><hr>', print_r($res1, true));
<?php
// array_slice($array,offset,lenght,flag)取出指定数组元素
$arr1 = ['姓名'=>'樊振东','性别'=>'男','拍型'=>'横拍','排名'=>'1','主项1'=>'男单','主项2'=>'男双'];
// // 取数组第1至6的元素,及全部元素
// $res1 = array_slice($arr1,0);
// // 取数组第3至5的元素
// $res1 = array_slice($arr1,2,2);
// // 取数组倒数第3至倒数第1个的元素
// $res1 = array_slice($arr1,-3,2);
// // 取数组第3至5的元素
// $res1 = array_slice($arr1,2,2);
// // 取数组第2至5之间的元素
// $res1 = array_slice($arr1,1,-1);
// // 取数组第2至5之间的元素,键名不改变
// $res1 = array_slice($arr1,1,-1,false);
// // 取数组第2至5之间的元素,键名改变
$res1 = array_slice(array_values($arr1),1,-1,true);
printf('<pre>%s</pre><hr>', print_r($res1, true));
// array_splice($array,offset,lenght)增、删、替换数组元素
$arr2 = ['苹果','雪梨','香蕉','荔枝','龙眼','菠萝','芒果','葡萄'];
// 在第3个后面增加2个数组元素
// $res2 = array_splice($arr2,2,0,['菠萝','甘蔗']);
// 删除数组第3-5元素:
// $res2 = array_splice($arr2,2,3);
// 替换数组第4和第5个元素:
$res2 = array_splice($arr2,3,2,['菠萝','甘蔗']);
printf('<pre>%s</pre><hr>', print_r($arr2, true));
总结:
1、自学老师未讲过的数组函数真不容易,我在中文网里查函数的选项也花了很多时间,哪里有函数手册呢?
2、回调函数有些难理解,主要是用于什么场景?比如拉平数组有什么用?只能先硬记下来,慢慢消化。
3、slice和splice通过变化参数,达到取子元素和增、删、改子元素的效果,挺神奇的,特别是splice,老师说跟数据库有关系,记住它。