博客列表 >数组与数组函数

数组与数组函数

Lin__
Lin__原创
2020年04月26日 07:55:24741浏览

数组函数

  • 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);

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