博客列表 >细说数组函数

细说数组函数

鹏建
鹏建原创
2020年04月26日 23:01:45684浏览



  1. <?php
  2. // 查询与替换
  3. // 1. array_slice(数组,开始,长度,bool): 从数组取部分值,并返回
  4. $fruits=["a"=>"apple","b"=>"banana","c"=>"mango","d"=>"watermelon","e"=>"pear","f"=>"strawberry"];
  5. $fruit=array_slice($fruits,0);
  6. printf('<pre>%s</pre>',print_r($fruits,true));
  7. $fruit=array_slice($fruits,2,3);
  8. printf('<pre>%s</pre>',print_r($fruit,true));
  9. $fruit=array_slice($fruits,-3,1);
  10. printf('<pre>%s</pre>',print_r($fruit,true));
  11. // 第三个参数为负数时,表示取到倒数第几,但不包括倒数第几
  12. $fruit=array_slice($fruits,-4,-2);
  13. printf('<pre>%s</pre>',print_r($fruit,true));
  14. // 第四个参数布尔值,是对于索引数组而言的,默认false,索引重置
  15. // array_values()只获取数组的值
  16. $fruits=array_values($fruits);
  17. printf('<pre>%s</pre>',print_r($fruits,true));
  18. $fruit=array_slice($fruits,1,4);
  19. printf('<pre>%s</pre>',print_r($fruit,true));
  20. $fruit=array_slice($fruits,1,4,false);
  21. printf('<pre>%s</pre>',print_r($fruit,true));
  22. $fruit=array_slice($fruits,1,4,true);
  23. printf('<pre>%s</pre>',print_r($fruit,true));
  24. // 2. array_splice(数组,开始,长度,数据):删除数组中的一部分并用其它值代替
  25. // 可以实现对数组的: 删除, 替换/更新, 添加
  26. $numbers=[5,28,90,49,27,80];
  27. printf('<pre>%s</pre>',print_r($numbers,true));
  28. // 删除: 返回被删除元素组成的数组
  29. $number=array_splice($numbers,1,3);
  30. printf('<pre>%s</pre>',print_r($number,true));
  31. $number=array_splice($numbers,-3,-1);
  32. printf('<pre>%s</pre>',print_r($number,true));
  33. // 替换
  34. $numbers=[5,28,63,90,49,27,80];
  35. array_splice($numbers,1,3,[12,13]);
  36. printf('<pre>%s</pre>',print_r($numbers,true));
  37. // 添加
  38. array_splice($numbers,1,0,[12]);
  39. printf('<pre>%s</pre>',print_r($numbers,true));
  40. // 注意:查看删除元素,打印的是array_splice函数;查看当前数组所有元素,打印的是数组。
  41. ?>





  1. <?php
  2. // 查询与替换
  3. // array_column(array,column,index_key):返回多维数组中某一单列的值组成的数组
  4. $users=[];
  5. $users[]=['id'=>'101','name'=>'peter','age'=>'10'];
  6. $users[]=['id'=>'102','name'=>'bill','age'=>'14'];
  7. $users[]=['id'=>'103','name'=>'alice','age'=>'12'];
  8. printf('<pre>%s</pre>',print_r($users,true));
  9. $names=array_column($users,'name');
  10. printf('<pre>%s</pre>',print_r($names,true));
  11. // 第三个参数用于重置返回数组的键
  12. $names=array_column($users,'name','id');
  13. printf('<pre>%s</pre>',print_r($names,true));
  14. // 第二个参数为空时,默认多维数组所有列,即返回整个数组
  15. printf('<pre>%s</pre>',print_r(array_column($users,null,'id'),true));
  16. // 第二个参数,可以是关联数组中某一列的键,也可以是索引数组中某一列的索引
  17. $a=[];
  18. $a[]=[1,'a','A'];
  19. $a[]=[2,'b','B'];
  20. $keys=array_column($a,'1');
  21. printf('<pre>%s</pre>',print_r($keys,true));
  22. // array_intersect(array1,array2...):返回多个数组值的交集组成的数组,键名与第一个数组键名一致
  23. $a=[1,'a','b',4,'love','g'];
  24. $b=[2,'b','3','g','hello','love'];
  25. $result=array_intersect($a,$b);
  26. printf('<pre>%s</pre>',print_r($result,true));
  27. // array_intersect_assoc(array1,array2...):返回多个数组值和键名都一致组成的数组,键名不变
  28. $a=[1,'a','b',4,'love','g'];
  29. $b=[2,'3','b','g','love','hello'];
  30. $result=array_intersect_assoc($a,$b);
  31. printf('<pre>%s</pre>',print_r($result,true));
  32. // array_diff(array1,array2...):返回多个数组比较差集组成的数组,键名与第一个数组键名一致
  33. // 差集是第一个数组里除了交集剩下的元素
  34. $a=[1,'a','b',4,'love','g'];
  35. $b=[2,'3','b','g','love','hello'];
  36. $result=array_diff($a,$b);
  37. printf('<pre>%s</pre>',print_r($result,true));
  38. // 分割与合并
  39. // array_merge():合并为新数组
  40. // 相同值仍多次存在
  41. $color1=['a'=>'red','b'=>'pink','c'=>'yellow'];
  42. $color2=['d'=>'black','e'=>'gray','f'=>'yellow'];
  43. $result=array_merge($color1,$color2);
  44. printf('<pre>%s</pre>',print_r($result,true));
  45. // 键名相同时,最后的一个值覆盖之前所有键名相同的值
  46. $color1=['a'=>'red','b'=>'pink','c'=>'yellow'];
  47. $color2=['d'=>'black','c'=>'gray'];
  48. $result=array_merge($color1,$color2);
  49. printf('<pre>%s</pre>',print_r($result,true));
  50. // array_chunk(array,size,bool):把一个数组分割为新的数组块
  51. // 第三参数bool,默认false键名重置
  52. $color=['a'=>'red','b'=>'pink','c'=>'yellow','d'=>'black'];
  53. $result=array_chunk($color,2);
  54. printf('<pre>%s</pre>',print_r($result,true));
  55. $result=array_chunk($color,2,false);
  56. printf('<pre>%s</pre>',print_r($result,true));
  57. $result=array_chunk($color,2,true);
  58. printf('<pre>%s</pre>',print_r($result,true));
  59. // // 自动生成
  60. // range(start,stop,step)创建一个整数列表
  61. // 默认步长为1
  62. printf('<pre>%s</pre>',print_r(range(0,5),true));
  63. printf('<pre>%s</pre>',print_r(range(0,5,2),true));
  64. // 支持负数
  65. printf('<pre>%s</pre>',print_r(range(-3,-6,1),true));
  66. // array_fill(index,number,value)用给定的键值填充数组
  67. $fruit=array_fill(4,3,'apple');
  68. printf('<pre>%s</pre>',print_r($fruit,true));
  69. //类型转换
  70. // extract(array,extract_rules,prefix):从数组中将变量导到当前符号表中(数组->变量)
  71. $user=['id'=>'102','name'=>'bill','age'=>'14'];
  72. extract($user);
  73. // 数组键名为变量名,数组键值为变量值
  74. // 双引号会解析变量,双引号内变量名需转义,在变量名前加\
  75. echo "\$id=$id,\$name=$name,\$age=$age".'<br>';
  76. // 第二个参数extract_rules:对不合法和冲突的键名的处理
  77. $user=['0'=>'102','2name'=>'bill','age'=>'14'];
  78. // EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀prefix
  79. //第三个参数prefix:一定情况下出现,加在不合法或数字或冲突的变量名前,变成合法或不冲突变量名
  80. $user=['0'=>'102','2name'=>'bill','age'=>'14'];
  81. extract($user,EXTR_PREFIX_INVALID,"a");
  82. echo "\$a_0=$a_0,\$a_2name=$a_2name,\$age=$age".'<br>';
  83. $id=103;
  84. $user=['id'=>'102','name'=>'bill','age'=>'14'];
  85. extract($user,EXTR_PREFIX_SAME,"a");
  86. echo "\$id=$id,\$a_id=$a_id,\$name=$name,\$age=$age";
  87. // compact():创建一个包含变量名和它们对应的值的关联数组
  88. $id=103;
  89. $name='alice';
  90. $age=12;
  91. $result=compact('id','name','age','grade');
  92. // 没有对应变量名的字符串会被自动忽略
  93. printf('<pre>%s</pre>',print_r($result,true));
  94. ?>

  1. <?php
  2. // 1、array_filter(): 用回调函数过滤数组中的元素,返回计算结果为true的元素组成的数组
  3. function age_range($a){
  4. if($a<50&$a>18){
  5. return true;}
  6. else{
  7. return false;
  8. }
  9. }
  10. $array=[5,7,26,19,58,46];
  11. // 键名不变
  12. printf('<pre>%s</pre><hr>', print_r(array_filter($array,"age_range"), true));
  13. // 2、array_map(): 为数组中的每个元素应用回调函数进行处理,返回新数组
  14. $a=['sport',[1,'a','b'],'5.5','旅游'];
  15. // 拉平数组
  16. $b=function($i){
  17. switch (gettype($i)){
  18. case 'array':
  19. $i=implode(',',$i);
  20. }
  21. return $i;};
  22. printf('<pre>%s</pre><hr>', print_r(array_map($b,$a), true));
  23. // 回调函数可以为null
  24. $a=[1,'a'];
  25. $b=[2,'b'];
  26. $result=array_map(null,$a,$b);
  27. printf('<pre>%s</pre><hr>', print_r($result, true));
  28. // 3、array_walk(): 使用自定义回调对数组中成员逐个处理,返回布尔值
  29. // array_walk(数组, 回调函数,回调函数的第三个数组的默认值)
  30. $user=['id'=>'101','name'=>'peter','age'=>'10'];
  31. // 回调函数,第一个参数是数组值,第二个参数是键名。(顺序不能颠倒)
  32. function myfunction($value,$key,$mark){
  33. echo "用户的{$key} {$mark} {$value}<br>";
  34. }
  35. array_walk($user,"myfunction",':');
  36. // 4、array_reduce(): 迭代处理数组元素
  37. $array=[5,7,26,19,58,46];
  38. echo array_reduce($array,function($a,$b){
  39. return $a.'~'.$b;
  40. });
  41. echo '<br>';
  42. // 第三个参数作为初始值处理
  43. $array=[5,7,26,19,58,46];
  44. echo array_reduce($array,function($a,$b){
  45. return $a.'+'.$b;
  46. },4);
  47. echo '<br>';
  48. // 注意与上面的区别
  49. $array=[5,7,26,19,58,46];
  50. echo array_reduce($array,function($a,$b){
  51. return $a+$b;
  52. },4);
  53. ?>

作业总结:看视频讲解感觉好像懂了,自己动手一写才发现不会,没有理解透彻,还得再投入时间去学习,还发现以前有的个别知识又忘了怎么用。可能短时间学太多,消化吸收不了,也缺乏练习应用。

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