Blogger Information
Blog 39
fans 0
comment 0
visits 30557
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP:数组函数
Original
690 people have browsed it

一、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,老师说跟数据库有关系,记住它。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:许多功能,如果你不知有这样一样函数数组,可能会写半天的
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post