Blogger Information
Blog 24
fans 4
comment 0
visits 20112
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
数组与数组函数
Lin__
Original
740 people have browsed it

数组函数

  • array_merge,合并多个数组,将多个数组的元素合并在一个新的数组并返回

语法:

  1. array_merge(数组1,数组2,....);

如果合并的数组中具有相同的字符串索引,那么后面的元素值将会覆盖前面的元素值。如果包含的是相同的数字索引,则不会覆盖,如果只传入一个索引数组,则进行重置数组索引的操作。

示例:

  1. <?php
  2. //传入具有相同字符串索引的数组
  3. echo '传入具有相同字符串索引的数组<br />';
  4. $arr1 = ['color'=>'red',2,4];
  5. $arr2 = ['a','b','color'=>'green',3];
  6. echo '原数组1:';
  7. print_r($arr1);
  8. echo '<br />原数组2:';
  9. print_r($arr2);
  10. echo '<br />合并后的数组:';
  11. $result = array_merge($arr1,$arr2);
  12. print_r($result);//上面两个数组中存在相同的字符串索引color,所以green会覆盖red的值,合并后的数组将不会出现red
  13. echo '<hr />';
  14. //只传入一个索引打乱的索引数组
  15. echo '只传入一个索引打乱的索引数组<br />';
  16. $arr3 = [4=>1,9=>2,20=>3];
  17. echo '原数组1:';
  18. print_r($arr3);
  19. echo '<br />合并后的数组:';
  20. $result = array_merge($arr3);
  21. print_r($result);//只传入一个索引数组,相当与是执行索引重置
  22. echo '<hr />';
  23. //传入一个索引打乱的索引数组,一个空数组
  24. echo '传入一个索引打乱的索引数组,一个空数组<br />';
  25. $arr4 = [];
  26. $arr5 = [4=>1,9=>2,20=>3];
  27. echo '原数组1:';
  28. print_r($arr4);
  29. echo '<br />原数组2:';
  30. print_r($arr5);
  31. echo '<br />合并后的数组:';
  32. $result = array_merge($arr4,$arr5);
  33. print_r($result);//只传入两个数组并且其中有个数组为空数组,相当于只传入一个数组,如果另一个是索引数组,则进行重置索引的操作
  34. echo '<hr />';

  • array_rand,从数组中随机取出一个或多个元素。如果只取一个,返回取出的元素的索引值。如果取出多个,则返回由这些元素的索引值组成的新数组

语法:

  1. array_rand(要操作的数组,[要取出的元素个数]);

如果没有设置个数,则默认为1个

  1. <?php
  2. //只取出一个值时
  3. echo '只取出一个值时';
  4. $arr = ['php','Java','JQuery','C++'];
  5. echo '<br />原数组:';
  6. print_r($arr);
  7. $result = array_rand($arr,1);
  8. echo '<br />取出的索引:';
  9. print_r($result);//只有一个值时,只返回一个索引值
  10. echo '<br />取出值对应的元素内容:'.$result.'=>'.$arr[$result];
  11. echo '<hr />';
  12. //取出多个值
  13. echo '取出多个值';
  14. $arr2 = ['php','Java','JQuery','C++','Ajax','Python'];
  15. echo '<br />原数组:';
  16. print_r($arr2);
  17. $result = array_rand($arr2,3);
  18. echo '<br />取出的索引:';
  19. print_r($result);//取出多个时,返回的是一个由取出索引组成的数组
  20. echo '<br />取出索引对应的元素内容:<br />';
  21. foreach($result as $v){
  22. echo $v.'=>'.$arr2[$v].'<br />';
  23. }

  • array_multisort,对多个数组或多维数组进行排序,返回的是布尔值。排序成功返回true,失败返回false

语法:

  1. array_multisort(要操作的数组1,[排序的顺序1,排序的类型1],要操作的数组2,[排序的顺序2,排序的类型2],...);

可以一次对一个、多个、多维数组进行排序。字符串索引不变,数字索引会被重新排列。排序的顺序和排序的类型可以省略不写

排序顺序

名称 描述
SORT_ASC 按照上升顺序排序,没有指定时,为默认值
SORT_DESC 按照下降顺序排序

排序类型

名称 描述
SORT_REGULAR 将元素按照通常方法进行比较,按照ASCII值排序,没有指定时,为默认值
SORT_NUMERIC 将元素按照数值进行比较
SORT_STRING 将元素按照字符串比较

示例:

  1. <?php
  2. //对单个数组进行排序
  3. $arr1 = ['10',100,100,'a'];
  4. echo '原数组:';
  5. print_r($arr1);
  6. array_multisort($arr1);//对数组使用ASCII值升序排序
  7. echo '<br />按照ASCII值升序排序后的数组:';
  8. print_r($arr1);
  9. echo '<hr />';
  10. //对两个数组排序
  11. $arr2 = ['10',100,100,'a'];
  12. $arr3 = [1,2,'2',3,1];
  13. echo '原数组1:';
  14. print_r($arr2);
  15. echo '<br />原数组2:';
  16. print_r($arr3);
  17. array_multisort($arr1,SORT_DESC,SORT_NUMERIC,$arr2,SORT_DESC,SORT_NUMERIC);//对两个数组都使用按照数值进行降序排序
  18. echo '<br />按照数值降序排序后的数组1:';
  19. print_r($arr2);
  20. echo '<br />按照数值降序排序后的数组2:';
  21. print_r($arr3);
  22. echo '<hr />';
  23. //对二维数组排序的方式一
  24. $arr4 = [
  25. ['id'=>1,2,'2',3],
  26. ['10',100,100,'a']
  27. ];
  28. echo '原数组元素1:';
  29. print_r($arr4[0]);
  30. echo '<br />原数组元素2:';
  31. print_r($arr4[1]);
  32. array_multisort(
  33. $arr4[0],SORT_ASC,SORT_STRING,//按照字符串进行升序排序
  34. $arr4[1],SORT_DESC,SORT_NUMERIC//按照数值进行降序排序
  35. );
  36. echo '<br />按照字符串升序排序后的数组元素1:';
  37. print_r($arr4[0]);
  38. echo '<br />按照数值降序排序后的数组元素2:';
  39. print_r($arr4[1]);
  40. echo '<hr />';
  41. //对二位数组的排序方式二
  42. $arr5 = [
  43. ['10',100,100,'a'],
  44. ['id'=>1,2,'2',3,1]
  45. ];
  46. echo '原数组元素1:';
  47. print_r($arr5[0]);
  48. echo '<br />原数组元素2:';
  49. print_r($arr5[1]);
  50. foreach($arr5 as $v){
  51. array_multisort($v,SORT_ASC,SORT_NUMERIC);//按照数值的进行升序排序
  52. }
  53. echo '<br />按照数值升序排序后的数组元素1:';
  54. print_r($arr2);
  55. echo '<br />按照数值升序排序后的数组元素2:';
  56. print_r($arr3);


按照方式一对多维数组进行排序时,如果每个数组的长度不一致,会有警告信息出现

  • array_diff,计算数组间的差集,返回的是一个新的数组

语法:

  1. array_diff(数组1,数组2,....);

对多个函数进行对比,遍历第一个数组中的元素值,如果在后面的所有的数组中都没有出现这个值,则将其保存到一个新的数组中,原数组的索引不变

示例:

  1. <?php
  2. $arr = ['a'=>'green','red','blue',2];
  3. $arr2 = ['b'=>'green','yellow','red'];
  4. $arr3 = [2,3];
  5. echo '数组1:';
  6. print_r($arr);
  7. echo '<br />数组2:';
  8. print_r($arr2);
  9. echo '<br />数组3:';
  10. print_r($arr3);
  11. echo '<br />数组间的差值结果:';
  12. $result = array_diff($arr,$arr2,$arr3);
  13. print_r($result);

  • array_key_exists,判断给定的索引在数组中是否存在,返回一个布尔值。如果存在返回true,如果不存在返回false

语法:

  1. array_key_exists(索引,数组);

示例:

  1. <?php
  2. $arr = ['name'=>'Lin','age'=>26];
  3. if(array_key_exists('name',$arr)){
  4. echo '该索引存在';
  5. }else{
  6. echo '该索引不存在';
  7. }

  • array_keys,返回数组中被查询元素值的索引,返回的是由索引组成的新数组

语法:

  1. array_keys(要操作的数组,[指定搜索的元素值,是否进行全等比较]);

第三个参数为布尔值类型,如果不进行全等(不仅值要相同,数据类型也要相同)比较的话,可以省略不写,否则传入TRUE。如果不传入要搜索的元素值,则默认返回该数组所有的索引

示例:

  1. <?php
  2. $arr = ['first'=>'red','10','third'=>'green','black'];
  3. echo '原数组:';
  4. print_r($arr);
  5. //返回数组中所有的索引
  6. echo '<br />返回数组中所有的索引:';
  7. print_r(array_keys($arr));
  8. //返回元素值为10的索引
  9. echo '<br />返回元素值为10的索引:';
  10. print_r(array_keys($arr,10));
  11. //返回元素值为10且数据类型为数值的索引
  12. echo '<br />返回元素值为10且数据类型为数值的索引:';
  13. print_r(array_keys($arr,10,TRUE));

  • range,建立指定范围的数组,返回的时生成的数组

语法:

  1. range(开始值,结束值,步进值);

步进值就是每次增长的数值,如果没有指定值,默认为1

示例:

  1. <?php
  2. $arr = range(10,70,7);
  3. print_r($arr);

  • array_combine,使用数组建立数组,返回的是建立的新数组

语法:

  1. array_combine(数组1,数组2);

数组1的元素值将作为新数组的索引,数组二的元素值将作为新数组的元素值

示例:

  1. <?php
  2. $arr = ['name','age'];
  3. $arr2 = ['Lin',26];
  4. echo '数组1:';
  5. print_r($arr);
  6. echo '<br />数组2:';
  7. print_r($arr2);
  8. $new_arr = array_combine($arr,$arr2);
  9. echo '<br />建立的新数组:';
  10. print_r($new_arr);

  • `array_chunk,分割数组,返回的是一个多维数组

语法:

  1. array_chunk(要操作的数组,分割出来的数组的个数,是否保留原数组索引值)

不指定是否保留原数组索引,默认为不保留,即FALSE,如果要保留,则传入TRUE

示例:

  1. <?php
  2. $arr = [1,2,3,4,5,6,7,8,9];
  3. echo '原数组:';
  4. print_r($arr);
  5. //分割成3个,保留原数组索引
  6. $result = array_chunk($arr,3,TRUE);
  7. echo '<br />分割成3个,保留原数组索引:';
  8. print_r($result);
  9. //分割成3个,不保留原数组索引
  10. $result2 = array_chunk($arr,3);
  11. echo '<br />分割成3个,不保留原数组索引:';
  12. print_r($result2);

  • array_intersect,计算数组的交集

语法:

  1. array_intersect(数组1,数组2,....);

遍历第一个数组,如果后面的数组有包含该元素值,则将该元素值保存至一个新的数组,索引保持不变

示例:

  1. <?php
  2. $arr = ['a'=>'red','green','blue'];
  3. $arr2 = ['b'=>'green','yellow'];
  4. echo '数组1:';
  5. print_r($arr);
  6. echo '<br />数组2:';
  7. print_r($arr2);
  8. $new_arr = array_intersect($arr,$arr2);
  9. echo '<br />数组的交集:';
  10. print_r($new_arr);

数组回调函数

  • array_filter,用回调函数过滤数组中的值,返回的是一个新数组

语法:

  1. array_filter(数组,回调函数);

将数组中的每个元素依次传入回调函数中,若回调函数返回的是TRUE,则该元素将会被保存在一个新的数组中,并且索引保持不变

示例:

  1. <?php
  2. $arr = [0,1,2,7,23,56,60,77];
  3. echo '原数组:';
  4. print_r($arr);
  5. $result = array_filter($arr,function($v){
  6. //判断是否为偶数
  7. if($v % 2 == 0){
  8. return $v;
  9. }
  10. });
  11. echo '<br />过滤后的数组:';
  12. print_r($result);

  • array_map,将回调函数作用到给定数组的每个值上,返回新的值

语法:

  1. array_map(回调函数,数组1,数组2,....);

回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致

示例:

  1. <?php
  2. $arr = ['red','yellow','blue'];
  3. echo '原数组:';
  4. print_r($arr);
  5. $result = array_map(function($v){
  6. return '<div style="width:100px;height:50px;background:'.$v.';"></div>';
  7. },$arr);
  8. echo '<br />处理后的结果:<br />';
  9. foreach($result as $v){
  10. echo $v;
  11. }

  • array_reduce,用回调函数将数组简化为单一的值

语法:

  1. array_reduce(要操作的数组,回调函数,[在开始处理前的第一个值]);

第三个参数也可以作为数组为空时的最后一个结果

示例:

  1. <?php
  2. //模拟拼接查询条件,二维数组相当于从数据库中查询出来的数据
  3. $arr = [
  4. ['id'=>101,'name'=>'Lin'],
  5. ['id'=>102,'name'=>'Lin']
  6. ];
  7. $result = array_reduce($arr,function($all,$v){
  8. $all.=$v['id'].',';
  9. return $all;
  10. });
  11. $sql = "select * from user where id in ( ".rtrim($result,',')." );";
  12. echo $sql;

  • array_walk,使用自定义回调对数组中成员逐个处理,返回布尔值

语法:

  1. array_walk(数组,回调函数);

回调函数有两个参数,第一个为元素值,第二个为键名

示例:

  1. <?php
  2. //模拟拼接支付加密串
  3. $arr = ['api_version'=>'1.0','card_no'=>'20200424125X','notify_url'=>'php.cn'];
  4. echo '原数组:';
  5. print_r($arr);
  6. array_walk($arr,function(&$v,$k){
  7. $v=$k.'='.$v.'&';
  8. });
  9. echo '<br />处理后的结果:';
  10. print_r($arr);
  11. echo '<br />加密后的结果:';
  12. echo MD5(implode('',$arr));

array_slice与array_splice

  • array_slice,返回数组中选定的部分。

语法:

  1. array_slice(数组,起始位置,长度,[是否保留键名]);

如果没有传入第三个参数,默认重置索引,如果为TRUE则保留索引

示例:

  1. <?php
  2. $arr = ["red","green","blue","yellow","brown"];
  3. echo '原数组:';
  4. print_r($arr);
  5. echo '<br />从正序选取的数组:';
  6. print_r(array_slice($arr,1,2));
  7. echo '<br />从倒序选取的数组:';
  8. print_r(array_slice($arr,-3,2));
  9. echo '<br />选取后的原数组:';
  10. print_r($arr);

  • array_splice,对数组中的元素进行删除或者替换,返回包含被移除元素的数组。

语法:

  1. array_splice(数组,起始位置,长度,[替换的内容]);

如果开始的位置为正数,则从前向后,反之则是从后向前。如果长度为0,则在开始的位置插入要替换的内容。如果没有替换的内容,则直接删除指定的元素。替换的内容可以是字符串也可以是数组

示例:

  1. <?php
  2. //删除指定元素
  3. $arr = [1,2,3,4,5,6];
  4. echo '原数组:';
  5. print_r($arr);
  6. array_splice($arr,2);
  7. echo '<br />删除指定的元素后的数组:';
  8. print_r($arr);
  9. //添加元素到指定位置
  10. $arr = [1,2,3,4,5,6];
  11. echo '<br />原数组:';
  12. print_r($arr);
  13. array_splice($arr,2,0,7);
  14. echo '<br />添加指定的元素后的数组:';
  15. print_r($arr);
  16. //替换指定元素
  17. $arr = [1,2,3,4,5,6];
  18. echo '<br />原数组:';
  19. print_r($arr);
  20. array_splice($arr,2,3,[7,8]);
  21. echo '<br />替换指定的元素后的数组:';
  22. print_r($arr);

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