博客列表 >PHP数组函数

PHP数组函数

longlong
longlong原创
2020年07月14日 16:27:37905浏览

1. PHP数组函数

  • array():用于创建数组,示例如下:
  1. <?php
  2. // 创建数组
  3. $stu = array('jack','male',30);
  4. print_r($stu); // 输出 Array ( [0] => jack [1] => male [2] => 30 )
  5. // 实际操作中,往往会省略这个函数,用中括号代替
  6. $stu = ['alice','female',20];
  7. print_r($stu); // 输出 Array ( [0] => alice [1] => female [2] => 20 )
  • 和键名相关的函数:

array_keys() :获取数组中的所有键名,并返回一个新的数组

  1. <?php
  2. $cars = ['BMW' => 'X6', '丰田' => '卡罗拉', '长安' => '逸动', '现代' => '索拉塔'];
  3. // array_keys:获取数组中的所有键名,并返回一个新的数组
  4. print_r(array_keys($cars));
  5. // 输出 Array ( [0] => BMW [1] => 丰田 [2] => 长安 [3] => 现代 )

array_key_exists():检查某个键名是否存在,返回布尔值

  1. <?php
  2. $cars = ['BMW' => 'X6', '丰田' => '卡罗拉', '长安' => '逸动', '现代' => '索拉塔'];
  3. echo array_key_exists('BMW',$cars) ? '存在' : '不存在'; //输出 存在
  4. echo array_key_exists('BMW111',$cars) ? '存在' : '不存在'; //输出 不存在

key():返回当前指针位置的键名

  1. <?php
  2. $cars = ['BMW' => 'X6', '丰田' => '卡罗拉', '长安' => '逸动', '现代' => '索拉塔'];
  3. // key():返回当前指针位置的键名,默认从0开始
  4. echo key($cars); // 输出 BMW
  5. // next():指针下移
  6. next($cars);
  7. echo key($cars); // 输出 丰田

array_key_first():返回数组中第一个元素的键名

array_key_last():返回数组中最后一个元素的键名

  1. <?php
  2. $cars = ['BMW' => 'X6', '丰田' => '卡罗拉', '长安' => '逸动', '现代' => '索拉塔'];
  3. echo array_key_first($cars); // 输出 BMW
  4. echo array_key_last($cars); // 输出 现代
  • 和值相关函数:

in_array():检查数组中是否存在指定的值,返回布尔值

  1. <?php
  2. $pets = ['dog' => '旺财', 'cat' => '花花', 'pig' => '佩奇'];
  3. var_dump( in_array('佩奇',$pets)); // true
  4. var_dump( in_array('汤米',$pets)); // false

array_values():返回数组中所有元素的值,并返回一个新的索引数组

  1. <?php
  2. $pets = ['dog' => '旺财', 'cat' => '花花', 'pig' => '佩奇'];
  3. print_r(array_values($pets));
  4. // 输出 Array ( [0] => 旺财 [1] => 花花 [2] => 佩奇 )

array_search():找到数组中元素含有指定值的键名并返回,若找不到,返回false

  1. <?php
  2. $pets = ['dog' => '旺财', 'cat' => '花花', 'pig' => '佩奇'];
  3. echo array_search('佩奇',$pets) ; // 输出 pig
  4. var_dump(array_search('佩奇22',$pets)) ; // 返回false
  5. // 该函数有第三个值,默认是false,若是true,表示搜索的值数据和类型都要一致,如下:
  6. $nums = ['a' => 10, 'b' => '10', 'c' => '10' ];
  7. // echo array_search(10,$nums,true); // 输出 a
  8. // echo array_search('10',$nums,true); // 输出 b ,表示只搜索一次,搜到了就返回了
  9. // 可以利用循环来搜索
  10. foreach( $nums as $keys => $values ){
  11. if($values === '10')
  12. echo $keys;
  13. } // 输出 bc

array_sum():返回数组中所有值的和

  1. <?php
  2. $nums = [10,20,30,'10'];
  3. echo array_sum($nums); // 返回 70,表示在运算时会将字符串自动转换为数值类型
  4. echo array_sum([10,20,'30aa']); // 返回 60
  5. echo array_sum([10,20,'aa30']); // 返回 30
  6. echo array_sum([10,20,true]); // 返回 31,表示布尔值也会转换,true为1,false为0
  7. echo array_sum([10,20,NULL]); // 返回 30
  8. // 利用循环来求和
  9. $sum = 0;
  10. foreach ( $nums as $values ) {
  11. $sum += $values;
  12. }
  13. echo $sum; // 输出 70

array_product():计算并返回数组中所有元素的值的乘积

  1. <?php
  2. $nums = [2,5,'5'];
  3. echo array_product($nums); // 输出 50
  4. echo array_product([2,5,'5',false]); // 输出 0 ,和求和一样,数据类型会自动转换
  5. // 利用循环求乘积
  6. $product = 1;
  7. foreach ( $nums as $values ) {
  8. $product *= $values;
  9. }
  10. echo $product; // 输出 50
  • count():计算并返回数组的长度
  1. <?php
  2. echo count([1,2,3,4,5,6,7,8,9,10]); // 返回 10
  3. echo count([1,2,3,true,NULL,'88']); // 返回 6
  • 栈与队列
  1. <?php
  2. // 栈与队列
  3. // 栈的原理:先进后出 LIFO
  4. // 队的原理:先进先除 FIFO
  5. // array_push():将一个或多个元素插入数组的末尾(入栈),返回值是新的数组的长度
  6. // array_pop():删除数组中的最后一个元素(出栈),返回值是被删除的元素
  7. // array_unshift():在数组开头插入一个或多个元素,返回值是新的数组的长度
  8. // array_shift():删除数组中的第一个元素,并返回被删除元素的值。
  9. $arr = [ 'yellow', 'red', 'green' ];
  10. // 1. 栈的尾部进行增删
  11. // 入栈 ,先进black,再进purple
  12. array_push ( $arr, 'black', 'purple' );
  13. print_r ( $arr );
  14. // 出栈
  15. array_pop ( $arr); //第一次出栈的是:后进的purple
  16. print_r($arr);
  17. array_pop ( $arr); //第二次出栈的是:先进的black
  18. print_r($arr);
  19. // 2. 栈的头部进行增删
  20. // 入栈 ,先进blue,再进pink
  21. array_unshift ( $arr, 'pink', 'blue' );
  22. print_r ( $arr );
  23. // 出栈
  24. array_shift ( $arr ); // 第一次出栈的是:后进的pink
  25. print_r ( $arr );
  26. array_shift ( $arr ); // 第二次出栈的是:先的进的blue
  27. print_r ( $arr );

  1. <?php
  2. // 3. 队列的尾部进行增删:尾部进队,头部出队
  3. $arr = [];
  4. // 尾部进队,顺序:a --> b --> c
  5. array_push( $arr, 'a', 'b', 'c');
  6. print_r($arr);
  7. // 头部出队,顺序:a --> b --> c
  8. array_shift($arr); // 第一次出队的是先进的a
  9. print_r($arr);
  10. array_shift($arr); // 第二次出队的是b
  11. print_r($arr);
  12. array_shift($arr); // 第三次出队的是c
  13. print_r($arr);
  14. // 4. 队列的头部进行增删:头部进队,尾部出队
  15. // 头部进队,顺序:z --> y --> x
  16. array_unshift( $arr, 'x', 'y', 'z');
  17. print_r($arr);
  18. // 尾部出队,顺序:z --> y --> x
  19. array_pop($arr);
  20. print_r($arr);
  21. array_pop($arr);
  22. print_r($arr);
  23. array_pop($arr);
  24. print_r($arr);

  • 数组排序:
  1. <?php
  2. // sort():对数组数值升序排列
  3. // rsort():对数组数值降序排列
  4. // asort():对关联数组按照键值升序排列
  5. // arsort():对关联数组按照键值降序排列
  6. // ksort():对关联数组按照键名升序排列
  7. // krsort():对关联数组按照键名降序排列
  8. // usort():由用户自定义函数对数组进行排序
  9. // uasort():由用户自定义函数对关联数组的键名进行排序
  10. // uksort():由用户自定义函数对关联数组的键值进行排序
  11. // natsort():用自然排序算法对数组排序
  12. // natcasesort():用自然排序算法对数组进行不区分大小写字母的排序
  1. <?php
  2. // 示例一:对索引数组进行升序,降序,自定义排序
  3. $arr = [55,36,89,'abc','ppp'];
  4. print_r($arr);
  5. // 1. 升序
  6. sort($arr);
  7. print_r($arr);
  8. // 2. 降序
  9. rsort($arr);
  10. print_r($arr);
  11. // 3. 自定义升序
  12. usort($arr, function ($a, $b) {
  13. if ($a==$b) return 0;
  14. return $a < $b ? -1 : 1;
  15. });
  16. print_r($arr);
  17. // 4. 自定义降序
  18. usort($arr, function ($a, $b) {
  19. if ($a==$b) return 0;
  20. return $a < $b ? 1 : -1;
  21. });
  22. print_r($arr);

  1. <?php
  2. // 示例二:对关联数组的键名和键值排序
  3. $arr = ['20'=>5, '10'=>'15', 'aaa'=>'8', 'dd'=>38];
  4. // 1. 对键名升序
  5. ksort($arr);
  6. print_r($arr);
  7. // 2. 对键名降序
  8. krsort($arr);
  9. print_r($arr);
  10. // 3. 对键值升序
  11. asort($arr);
  12. print_r($arr);
  13. // 4. 对键值降序
  14. arsort($arr);
  15. print_r($arr);

  1. <?php
  2. // 示例三:自定义函数对关联数组按照键名和键值排序
  3. $arr = ['20'=>5, '10'=>'15', 'aaa'=>'8', 'dd'=>38];
  4. // 1. 自定义函数按照键名升序排列
  5. uksort($arr, function ($a, $b) {
  6. if ($a==$b) return 0;
  7. return $a < $b ? -1 : 1;
  8. });
  9. print_r($arr);
  10. // 2. 自定义函数按照键值降序排列
  11. uasort($arr, function ($a, $b) {
  12. if ($a==$b) return 0;
  13. return $a < $b ? 1 : -1;
  14. });
  15. print_r($arr);

  1. <?php
  2. // 示例四:用自然算法对数组排序,只排列键值,不影响键名
  3. // 1.使用natsort()
  4. $pics = ['pic5.jpg', 'pic8.jpg', 'pic12.jpg', 'pic9.jpg'];
  5. sort($pics);
  6. print_r($pics);
  7. natsort($pics);
  8. print_r($pics);
  9. // 2. 使用natcasesort()
  10. $pics = ['pic5.jpg', 'PIC8.jpg', 'pic12.jpg', 'pic9.JPG'];
  11. natsort($pics);
  12. print_r($pics);
  13. natcasesort($pics);
  14. print_r($pics);

  • array_slice():返回数组选定的部分,不影响原始数组
  1. <?php
  2. $arr = ['one', 'two', 'three', 'four', 'aa' => 'five'];
  3. // 传两个参数,表示从起始位置截取到末尾
  4. print_r(array_slice($arr, 2));
  5. // 传三个参数,表示从起始位置开始截取的个数
  6. print_r(array_slice($arr, 2, 2));
  7. // 传入四个参数,最后一个参数默认是true,保留键名,若为false,表示不保留键名
  8. print_r(array_slice($arr, 1, 3, false));

  • array_splice():从数组中移除并返回选定的元素,会影响原始数组,实现增删改
  1. <?php
  2. $arr = ['one', 'two', 'three', 'four', 'aa' => 'five'];
  3. // 传入两个参数,表示从起始位置开始移除到末尾(删除)
  4. print_r(array_splice($arr, 3));
  5. print_r($arr);
  6. // 传入三个参数,表示从起始位置开始移除,移除几个,若第三个参数为0,表示不移除,即不变
  7. $arr = ['one', 'two', 'three', 'four', 'aa' => 'five'];
  8. print_r(array_splice($arr, 2, 2));
  9. print_r($arr);
  10. // 传入四个参数时,表示可将第四个参数(数组或字符串)从移除的起始位置开始插入到数组(替换)
  11. $arr = ['one', 'two', 'three', 'four', 'aa' => 'five'];
  12. $nums = [10,20,'aaa','bbb'];
  13. print_r(array_splice($arr, 1, 2 ,$nums));
  14. print_r($arr);
  15. // (新增):需要把第三个参数设置为0,比如:
  16. $arr = ['one', 'two', 'three', 'four', 'aa' => 'five'];
  17. print_r(array_splice($arr, 1, 0, [666,888]));
  18. print_r($arr);

  • array_map:将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新的值的数组
  1. <?php
  2. // 示例:将数组中的所有值全部增大1倍,包括数组中的数组
  3. $nums = [2,3,5,[2,3,5]];
  4. print_r(array_map( function ($a) {
  5. if ( gettype($a) === 'array' ) {
  6. $nums1 = array_map(function($b){
  7. return $b*$b;
  8. },$a);
  9. return $nums1;
  10. }
  11. return $a*$a;
  12. } , $nums));

  • array_merge():用于把一个或多个数组合并为一个数组
  1. <?php
  2. // 当只有一个参数且数组的键名为整数数值时,键名会从0重新开始索引
  3. $arr = ['5'=>10, '10'=>20];
  4. print_r(array_merge($arr));
  5. $arr1 = ['id1' => 1001, 'name1' => 'Jack', 'hobby' => 'book'];
  6. $arr2 = ['id2' => 1002, 'name2' => 'Alice', 'hobby' => 'fish'];
  7. // 如果两个数组中有相同键名,那么后者的值会覆盖前者
  8. print_r(array_merge($arr1, $arr2));
  9. // array_merge_recursive():此函数和array_merge()不一样的是:遇到相同键名,不会覆盖,而是递增为一个新数组
  10. $arr1 = ['id1' => 1001, 'name1' => 'Jack', 'hobby' => 'book'];
  11. $arr2 = ['id2' => 1002, 'name2' => 'Alice', 'hobby' => 'fish'];
  12. print_r(array_merge_recursive($arr1, $arr2));

  • array_combine():通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组的元素为键值
  1. <?php
  2. $arr1 = ['dog', 'cat', 'pig'];
  3. $arr2 = ['旺财','汤姆','佩奇'];
  4. // 第一个参数表示键名,第二个参数表示键值
  5. print_r(array_combine($arr1,$arr2));

  • array_filter():只返回能够将数组中元素转为true的元素,然后组成新的数组,数组键名保持不变
  1. <?php
  2. $arr = [10,'15','0',0,'1',true,false,null,'',[],'aaa'];
  3. $result = array_filter($arr,function ($item) {
  4. return $item;
  5. });
  6. print_r($result);
  7. // [], null, false,'', 0, '0' : 转为false

  • compact():将一组变量变为关联数组
  1. <?php
  2. $name = 'Mr Long';
  3. $height = 180;
  4. $face = 'handsome';
  5. print_r(compact('name', 'height', 'face'));

  • extract():将关联数组拆分为变量,可以直接访问变量
  1. <?php
  2. $info = ['id'=>1001, 'name'=>'Jack', 'email'=>'8888@qq.com'];
  3. extract($info);
  4. echo $id.','.$name.','.$email;

  • array_unique():删除数组中重复的值,然后返回新的数组
  1. <?php
  2. $arr = ['a'=>10, 'b'=>20, 'c'=>10];
  3. print_r(array_unique($arr));

  • 数组指针
  1. <?php
  2. $arr = [10,20,30,50,60,70];
  3. // current():当前指针位置对应的值
  4. echo current($arr),'<hr>';
  5. // next():指针下移到下一个位置
  6. echo next($arr),'<hr>';
  7. echo next($arr),'<hr>';
  8. // prev():指针上移
  9. echo prev($arr),'<hr>';
  10. // end():指针移动到最后一个位置
  11. echo end($arr),'<hr>';
  12. // reset():指针复位,回到第一个位置
  13. echo reset($arr);

2. 总结

数组函数没有全部举例,剩下的函数自己花时间再挨个写写,在过程中,我发现有的函数实现的功能可能并不能达到用户的需求,需要用户自定义函数,另外,有的函数利用循环也能实现其功能,总之,对于一个函数,我们要了解的是其功能,参数及其返回值,然后函数之间有的也可以相互嵌套,需要灵活运用。

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