博客列表 >PHP:数组函数

PHP:数组函数

楷
原创
2020年04月29日 18:33:10692浏览

一、10个课堂上未讲的数组函数

  1. <?php
  2. // 数组函数实例
  3. // 与键值相关函数
  4. // 1.获取所有键名的数组
  5. $arr1 = ['姓名'=>'樊振东','性别'=>'男','拍型'=>'横拍','排名'=>'1','主项1'=>'男单','主项2'=>'男双'];
  6. $res1 = array_keys($arr1);
  7. printf('获取所有键名的数组 :<pre>%s</pre>',print_r($res1,true));
  8. echo '<hr>';
  9. // 2.是否存在指定键名 array_key_exists(key,array)
  10. $arr2 = ['姓名'=>'陈梦','性别'=>'女','拍型'=>'横拍','排名'=>'1','主项1'=>'女单','主项2'=>'女双'];
  11. $query1 = '排名';
  12. $res2 = array_key_exists($query1, $arr2);
  13. // 判断是否存在指定的键名
  14. if ($res2)
  15. { echo '存在键名 :' . $query1;}
  16. else
  17. { echo '不存在键名 :' . $query1;};
  18. echo '<br>';
  19. $query2 = '配偶';
  20. $res2 = array_key_exists($query2, $arr2);
  21. if ($res2)
  22. { echo '存在键名 :' . $query2;}
  23. else
  24. { echo '不存在键名 :' . $query2;};
  25. echo '<hr>';
  26. // 3.获取第一/最后一个数组
  27. $arr3 = ['姓名'=>'刘诗雯','性别'=>'女','拍型'=>'横拍','排名'=>'2','主项1'=>'女单','主项2'=>'混双'];
  28. $res3 = array_key_last($arr3);
  29. $res31 = array_key_first($arr3);
  30. echo '最后一个键名 :' . $res3,'<br>';
  31. echo '第一个键名 :' . $res31,'<hr>';
  32. // 与值相关的数组函数
  33. // 4.检查数组是否存在某个值:in_array(key,array)
  34. $arr4 = ['姓名'=>'许昕','性别'=>'男','拍型'=>'竖拍','排名'=>'5','主项1'=>'男单','主项2'=>'混双'];
  35. $res4 = in_array('男双',$arr4);
  36. if($res4){
  37. echo '存在键值 :'.'男双';
  38. }else{
  39. echo '不存在键值 : '.'男双';
  40. }
  41. echo '<hr>';
  42. // 5.搜索指定的值,返回对应的键名:array_search(key,array)
  43. echo array_search(1,$arr1),'<hr>';
  44. // 6.删除重复的值
  45. $arr6 = ['姓名'=>'马龙','性别'=>'男','拍型'=>'竖拍','排名'=>'6','主项1'=>'男单','主项2'=>'男单'];
  46. printf('原数组:<pre>%s</pre>',print_r($arr6,true));
  47. echo '<br>';
  48. printf('删除重复值:<pre>%s</pre>',print_r(array_unique($arr6),true));
  49. echo '<hr>';
  50. // 数组合并
  51. // 7.合并2个数组,分别是$arraykey、$arrayval.
  52. $arrkey = ['姓名','性别','拍型','排名','主项1','主项2'];
  53. $arrval = ['王曼昱','女','横拍','6','女单','女双'];
  54. $res11 = array_combine($arrkey,$arrval);
  55. printf('<pre>%s</pre>',print_r($res11,true));
  56. echo '<hr>';
  57. // 8.把多个数组合并为一个数组:array_merge
  58. $res12 = array_merge($arr1,$arr2,$arr3);
  59. // 结果是最后一个数组的$arr3的值
  60. printf('<pre>%s</pre>',print_r($res12,true));
  61. echo '<hr>';
  62. // 9.把一个数组分割成2个元素组成的数组
  63. $res13 = array_chunk($arr3,2);
  64. printf('<pre>%s</pre>',print_r($res13,true));
  65. echo '<hr>';
  66. // 10.数组指针当前元素的值,第一次查都是第一个值
  67. $res14 = current($arr1);
  68. var_dump($res14);
  69. printf('<pre>%s</pre>',print_r($res14,true));

运行结果


二、四个数组回调函数举例演示

  1. <?php
  2. // 回调函数
  3. // 1.array_filter():过滤数组中的元素,返回值为true的数组元素。
  4. $arr1 = [99,'best',true,[1,6,8],(new class{}),0,'0','',null,false];
  5. printf('过滤前的数组:<pre>%s</pre>',print_r($arr1,true));
  6. $res = array_filter($arr1);
  7. printf('过滤后的数组:<pre>%s</pre>',print_r($res,true));
  8. // 返回标量即单值元素的数组:
  9. $res1 = array_filter($arr1,function($res2){
  10. return is_scalar($res2);
  11. });
  12. printf('过滤非单值元素后的数组:<pre>%s</pre>',print_r($res1,true));
  13. // 2.把数组、对象的元素、属性转换为字符串
  14. $arr2 = [99,'best',true,[1,6,8],(new class{public $name='名称';public $totel = '9999';}),0,'0','',null,false];
  15. $res2 = array_map(function($item){
  16. // 将对象和数组转换/拉平
  17. switch (gettype($item)) {
  18. case 'object':
  19. $item = get_object_vars($item);
  20. case 'array':
  21. $item = implode(', ', $item);
  22. }
  23. return $item;
  24. }, $arr2);
  25. printf('转换非单值元素后的数组:<pre>%s</pre>',print_r($res2,true));

回调函数运行结果1

  1. <?php
  2. // array_map(): 同时处理多个数组
  3. $key = ['host', 'username', 'password'];
  4. $values = ['localhost', 'root', '123456'];
  5. $res = array_map(function($value1, $value2)
  6. {
  7. return [$value1 => $value2];
  8. }, $key, $values);
  9. printf('<pre>%s</pre><hr>', print_r($res, true));
  10. // 3. array_reduce(): 迭代处理数组元素
  11. $res=array_reduce($res, function($prev, $current){
  12. // 获取当前元素的键
  13. $key = key($current);
  14. // 获取当前元素的值
  15. $value = current($current);
  16. // 拼装成键值对
  17. $prev[$key] = $value;
  18. return $prev;
  19. });
  20. printf('内置的数组迭代:<pre>%s</pre><hr>', print_r($res, true));
  21. // 4. array_walk(): 使用自定义回调对数组中成员逐个处理,返回布尔值
  22. // 主要用于数组成员 的格式化, 不受数组指针影响
  23. $res = ['id'=>8, 'name'=>'admin', 'email'=>'admin@php.cn'];
  24. // array_walk(数组, 回调,回调的第三个数组的默认值)
  25. array_walk($res, function($value, $key, $color) {
  26. printf('[ %s ] => <span style="color:%s">%s</span><br>',$key,$color, $value );
  27. },'pink');

回调函数运行结果2

三、array_slice()与array_splice()实例演示

  1. <?php
  2. // array_slice($array,offset,lenght,flag)取出指定数组元素
  3. $arr1 = ['姓名'=>'樊振东','性别'=>'男','拍型'=>'横拍','排名'=>'1','主项1'=>'男单','主项2'=>'男双'];
  4. // // 取数组第1至6的元素,及全部元素
  5. // $res1 = array_slice($arr1,0);
  6. // // 取数组第3至5的元素
  7. // $res1 = array_slice($arr1,2,2);
  8. // // 取数组倒数第3至倒数第1个的元素
  9. // $res1 = array_slice($arr1,-3,2);
  10. // // 取数组第3至5的元素
  11. // $res1 = array_slice($arr1,2,2);
  12. // // 取数组第2至5之间的元素
  13. // $res1 = array_slice($arr1,1,-1);
  14. // // 取数组第2至5之间的元素,键名不改变
  15. // $res1 = array_slice($arr1,1,-1,false);
  16. // // 取数组第2至5之间的元素,键名改变
  17. $res1 = array_slice(array_values($arr1),1,-1,true);
  18. printf('<pre>%s</pre><hr>', print_r($res1, true));
  19. <?php
  20. // array_slice($array,offset,lenght,flag)取出指定数组元素
  21. $arr1 = ['姓名'=>'樊振东','性别'=>'男','拍型'=>'横拍','排名'=>'1','主项1'=>'男单','主项2'=>'男双'];
  22. // // 取数组第1至6的元素,及全部元素
  23. // $res1 = array_slice($arr1,0);
  24. // // 取数组第3至5的元素
  25. // $res1 = array_slice($arr1,2,2);
  26. // // 取数组倒数第3至倒数第1个的元素
  27. // $res1 = array_slice($arr1,-3,2);
  28. // // 取数组第3至5的元素
  29. // $res1 = array_slice($arr1,2,2);
  30. // // 取数组第2至5之间的元素
  31. // $res1 = array_slice($arr1,1,-1);
  32. // // 取数组第2至5之间的元素,键名不改变
  33. // $res1 = array_slice($arr1,1,-1,false);
  34. // // 取数组第2至5之间的元素,键名改变
  35. $res1 = array_slice(array_values($arr1),1,-1,true);
  36. printf('<pre>%s</pre><hr>', print_r($res1, true));
  37. // array_splice($array,offset,lenght)增、删、替换数组元素
  38. $arr2 = ['苹果','雪梨','香蕉','荔枝','龙眼','菠萝','芒果','葡萄'];
  39. // 在第3个后面增加2个数组元素
  40. // $res2 = array_splice($arr2,2,0,['菠萝','甘蔗']);
  41. // 删除数组第3-5元素:
  42. // $res2 = array_splice($arr2,2,3);
  43. // 替换数组第4和第5个元素:
  44. $res2 = array_splice($arr2,3,2,['菠萝','甘蔗']);
  45. printf('<pre>%s</pre><hr>', print_r($arr2, true));

总结:
1、自学老师未讲过的数组函数真不容易,我在中文网里查函数的选项也花了很多时间,哪里有函数手册呢?
2、回调函数有些难理解,主要是用于什么场景?比如拉平数组有什么用?只能先硬记下来,慢慢消化。
3、slice和splice通过变化参数,达到取子元素和增、删、改子元素的效果,挺神奇的,特别是splice,老师说跟数据库有关系,记住它。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议