Blogger Information
Blog 14
fans 0
comment 0
visits 7680
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
细说数组函数
鹏建
Original
685 people have browsed it



  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. ?>

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

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