博客列表 >php之数组函数

php之数组函数

Jason
Jason原创
2020年04月28日 19:38:56773浏览

php十个常用数组函数,回调函数,与array_slice

在php中,数组函数和字符串函数,两个加起来,可以说完成了很多工作,比如数组的排序,在用c语言写的话,就要写一个函数功能块,而在php中,大大简化了这一步,
数组常用函数,PHP都已经内置好了,只管调用就行,所以,掌握好字符串函数和数组函数,就能优化你的代码

十个常用数组函数

1.array_search()搜索数组中的值

array_search(搜索值,数组,类型是否相同),在数组中搜索给定的值,如果成功返回相应的键名

示例:

  1. $str = ['blue','green','red','black'];
  2. $search = 'blue';
  3. $key = array_search($search,$str);
  4. echo $key;

输出:
0

2.array_merge() 合并数组

array_merge(array1,arrar2,...),合并数组,如果是索引数组,则键名保持不变,如果是关联数组,则会重新进行设置

示例:

  1. $array1 = ['10','id' =>'10','99'];
  2. $array2 = ['20','id' =>'30','40'];
  3. $array3 = ['30','id' =>'40','50'];
  4. $result = array_merge($array1,$array2,$array3);
  5. printf('<pre>%s</pre>',print_r($result,true));

输出:

  1. Array
  2. (
  3. [0] => 10
  4. [id] => 40
  5. [1] => 99
  6. [2] => 20
  7. [3] => 40
  8. [4] => 30
  9. [5] => 50
  10. )

3.key()

从关联数组中取得键名
案例:

  1. $array = ['id' => '2','name' => '张三','class' =>'991'];
  2. while ( $array_name = current($array)){
  3. if ($array_name == '张三'){
  4. echo key($array).'<br>';
  5. }
  6. next($array);
  7. }
  8. echo '<hr>';

输出:
Array ( [0] => id [1] => name [2] => class )

4.array_chunk()

将一个数组分割成多个

示例

  1. $input_array = ['name' => 'apple','price' => '12','type' =>'中国'];
  2. printf('<pre>%s<pre>',print_r(array_chunk($input_array,2,true),true));
  3. echo '<hr>';

输出

  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [name] => apple
  6. [price] => 12
  7. )
  8. [1] => Array
  9. (
  10. [type] => 中国
  11. )
  12. )

5.array_combine()

创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值

  1. $a = ['name','id','class','school'];
  2. $b = ['张三','10','198','女子高中'];
  3. $c = array_combine($a,$b);
  4. printf('<pre>%s</pre>',print_r($c,true));
  5. echo '<hr>';

输出:

  1. Array
  2. (
  3. [name] => 张三
  4. [id] => 10
  5. [class] => 198
  6. [school] => 女子高中
  7. )

6.array_diff()

arrray_diff($array1,$array2,array3),对比array1和其他一个或多个数组,返回在array1中但不在其他数组里的值

示例

  1. $array1 = ['apple','banana','orange','jjjj'];
  2. $array2 = ['apple','banana'];
  3. $array3 = ['apple'];
  4. $result = array_diff($array1,$array2,$array3);
  5. print_r($result);

输出

  1. Array
  2. (
  3. [2] => orange
  4. [3] => jjjj
  5. )

7.array_map()

为数组的每个元素应用回调函数

示例

  1. // 为数组的每个元素应用回调函数
  2. $array1 = ['1','2','3','4','5'];
  3. $array2 = ['2','3','4','5','6'];
  4. // 执行单个数组的回调函数
  5. function cube($n)
  6. {
  7. return ($n * $n);
  8. }
  9. function cube1($n, $m)
  10. {
  11. return ($n * $m);
  12. }
  13. $b = array_map("cube",$array1);
  14. // 传入两个及以上的数组时,他们元素数量将会相等。因为回调函数会并行处理相互对于的元素,如果长度不一,空元素会扩展短数组
  15. $c = array_map('cube1',$array1,$array2);
  16. print_r($b);
  17. // 当回调函数为null值时,会创建一个多维数组
  18. $d = array_map(null,$array1,$array2);
  19. printf('<pre>%s</pre>',print_r($d,true));
  20. echo '<hr>';

输出:

  1. Array
  2. (
  3. [0] => 1
  4. [1] => 4
  5. [2] => 9
  6. [3] => 16
  7. [4] => 25
  8. )
  9. Array
  10. (
  11. [0] => Array
  12. (
  13. [0] => 1
  14. [1] => 2
  15. )
  16. [1] => Array
  17. (
  18. [0] => 2
  19. [1] => 3
  20. )
  21. [2] => Array
  22. (
  23. [0] => 3
  24. [1] => 4
  25. )
  26. [3] => Array
  27. (
  28. [0] => 4
  29. [1] => 5
  30. )
  31. [4] => Array
  32. (
  33. [0] => 5
  34. [1] => 6
  35. )
  36. )

8.array_intersect()

计算数组的交集
array_intersect($array1, array $array2,…);
函数执行返回一个数组,该数组包含了所有在array1中同时出现在所有其他参数数组中的值,键名保持不变

示例:

  1. $array = ['green','red','blue','pink'];
  2. $array1 = ['green','blue'];
  3. $array2 = ['red','blue'];
  4. $result = array_intersect($array,$array1,$array2);
  5. print_r($result);
  6. echo '<hr>';

输出:

  1. Array
  2. (
  3. [2] => blue
  4. )

9.array_intersect_key()

使用键名比较数组的交集,函数返回一个数组,该数组包含了所有在array1中并同时出现在所有其他数组中的键名的值
注意只检查键名

示例:

  1. $array = ['color'=>'green','lightpink','type'=>'red','pink','black'];
  2. $array1 = ['color'=>'blue','type'=>'pink','black'];
  3. $array2 = array_intersect_key($array,$array1);
  4. printf('<pre>%s</pre>',print_r($array2,true));
  5. echo '<hr>';

输出:

  1. Array
  2. (
  3. [color] => green
  4. [0] => lightpink
  5. [type] => red
  6. )

10.array_count_values()

函数返回一个数组:数组的键是array里value的值,数组的值是array出现的次数

示例:

  1. $array = [1,2,3,'hello','the','world','the',1,2];
  2. print_r(array_count_values($array));

输出:

  1. Array
  2. (
  3. [1] => 2
  4. [2] => 2
  5. [3] => 1
  6. [hello] => 1
  7. [the] => 2
  8. [world] => 1
  9. )

回调函数

1.array_filter()

  1. 用回调过滤数组中的单元,返回计算结果为true的元素组成的数组
  2. $arr = [150,'php',true,[4,5,6],(new class{}),[],null,false,'',0,'0'];
  3. $res = array_filter($arr,function($item){
  4. return $item;
  5. });
  6. $res = array_filter($arr);
  7. // 只返回标量的数据
  8. $res = array_filter($arr,function($item){
  9. return is_scalar($item);
  10. });
  11. printf('<pre>%s</pre><hr>',print_r($res,true));
  12. echo '<hr>';

2.array_map()

为数组中的每个元素应用回调函数进行处理,返回新数组,通常用在数组过滤中

实例:

  1. $arr = ['php',[3,4,5],(new class{public $name = '电脑';public $price = 8888;}),15,20];
  2. $res = array_map(function($item){
  3. switch(gettype($item)){
  4. case 'object':
  5. $item = get_object_vars($item);
  6. case 'array':
  7. $item = implode(',',$item);
  8. }
  9. return $item;
  10. },$arr);
  11. printf('<pre>%s</pre><hr>',print_r($res,true));
  12. echo '<hr>';

输出

  1. Array
  2. (
  3. [0] => php
  4. [1] => 3,4,5
  5. [2] => 电脑,8888
  6. [3] => 15
  7. [4] => 20
  8. )

2.array_map():

同时处理多个数组,可以同时进行合并

实例:

  1. ```php
  2. $key = ['host','username','password'];
  3. $values = ['localhost','root','123456'];
  4. $res = array_combine($key,$values);
  5. $res = array_map(function($value1,$value2){
  6. return [$value1 => $value2];
  7. },$key,$values);
  8. printf('<pre>%s</pre>',print_r($res,true));
  9. echo $res[2]['password'];
  10. echo '<hr>';
  11. ```

输出:

  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [host] => localhost
  6. )
  7. [1] => Array
  8. (
  9. [username] => root
  10. )
  11. [2] => Array
  12. (
  13. [password] => 123456
  14. )
  15. )

3.array_reduce():迭代处理数组元素

  1. 示例:
  2. ```php
  3. function my_array_reduce($array,$callback,$init=null){
  4. $prev = $init;
  5. foreach($array as $current) {
  6. $prev = $callback($prev,$current);
  7. }
  8. return $prev;
  9. }
  10. $result = my_array_reduce($res,function($prev,$current){
  11. // 获取当前元素的键
  12. $key = key($current);
  13. // 获取当前元素的值
  14. $value = current($current);
  15. // 拼装成键值对
  16. $prev[$key] = $value;
  17. return $prev;
  18. });
  19. printf('自定义迭代:<pre>%s</pre><hr>',print_r($result,true));
  20. echo '<hr>';
  21. $res = array_reduce($res,function($prev,$current){
  22. // 获取当前元素的键
  23. $key = key($current);
  24. // 获取当前元素的值
  25. $value = current($current);
  26. // 拼装成键值对
  27. $prev[$key] = $value;
  28. return $prev;
  29. });
  30. printf('内置的数组迭代:<pre>%s</pre>',print_r($res,true));
  31. ```

输出:

  1. Array
  2. (
  3. [host] => localhost
  4. [username] => root
  5. [password] => 123456
  6. )

4.array_walk()

使用自定义回调对数组成员组个处理,返回布尔值
实例:

  1. // 主要用于数组成员的格式化,不受数组指针影响
  2. $res = ['id' => 10,'name' => '张三','email' => '123@qq.com'];
  3. // array_walk(数组,回调,回调的第三个数组的默认值)
  4. array_walk($res,function($value,$key,$color){
  5. printf('[%s] => <span style = "color:%s">%s</span><br>',$key,$color,$value);
  6. },'yellow');

输出:

  1. [id] => 10
  2. [name] => 张三
  3. [email] => 123@qq.com

array_slice()

array_slice()array_splice两个函数,可以认为另一个是加强版,slice是从数组中截取一段,splice是可以实现数组的删除与替换

示例:

  1. // array_slice();从数组取出一部分
  2. $array = ['id'=>'1','name'=>'张三','age'=>'19','class'=>'1988'];
  3. $output = array_slice($array,0);
  4. printf('<pre>%s</pre>',print_r($output,true));
  5. // 获取前两个
  6. $output = array_slice($array,0,2);
  7. printf('<pre>%s</pre>',print_r($output,true));
  8. // 获取中间两个
  9. $output = array_slice($array,-3,2);
  10. printf('<pre>%s</pre>',print_r($output,true));
  11. // 第二个参数支持复数
  12. $output = array_slice($array,1,-1);
  13. printf('<pre>%s</pre>',print_r($output,true));
  14. echo '<hr>';

输出

  1. Array
  2. (
  3. [id] => 1
  4. [name] => 张三
  5. [age] => 19
  6. [class] => 1988
  7. )
  8. Array
  9. (
  10. [id] => 1
  11. [name] => 张三
  12. )
  13. Array
  14. (
  15. [name] => 张三
  16. [age] => 19
  17. )
  18. Array
  19. (
  20. [name] => 张三
  21. [age] => 19
  22. )

2.array_splice()

  1. // 删除数组中的一部分并用其他值代替
  2. $array = [1,2,3,4,5,6,7,8];
  3. printf('原始数组元素:<pre>%s</pre>',print_r($array,true));
  4. // 删除元素
  5. $result = array_splice($array,1,2);
  6. printf('<pre>%s</pre>',print_r($array,true));
  7. // 替换功能
  8. $result = array_splice($array,1,2,[888,999]);
  9. printf('<pre>%s</pre>',print_r($array,true));
  10. // 添加
  11. $res = array_splice($array,1,0,[55,66]);
  12. printf('<pre>%s</pre>',print_r($array,true));
  13. // 负数的添加
  14. $res = array_splice($array,-3,2,[44,33,11]);
  15. printf('<pre>%s</pre>',print_r($array,true));

输出

  1. 原始数组元素:
  2. Array
  3. (
  4. [0] => 1
  5. [1] => 2
  6. [2] => 3
  7. [3] => 4
  8. [4] => 5
  9. [5] => 6
  10. [6] => 7
  11. [7] => 8
  12. )
  13. Array
  14. (
  15. [0] => 1
  16. [1] => 4
  17. [2] => 5
  18. [3] => 6
  19. [4] => 7
  20. [5] => 8
  21. )
  22. Array
  23. (
  24. [0] => 1
  25. [1] => 888
  26. [2] => 999
  27. [3] => 6
  28. [4] => 7
  29. [5] => 8
  30. )
  31. Array
  32. (
  33. [0] => 1
  34. [1] => 55
  35. [2] => 66
  36. [3] => 888
  37. [4] => 999
  38. [5] => 6
  39. [6] => 7
  40. [7] => 8
  41. )
  42. Array
  43. (
  44. [0] => 1
  45. [1] => 55
  46. [2] => 66
  47. [3] => 888
  48. [4] => 999
  49. [5] => 44
  50. [6] => 33
  51. [7] => 11
  52. [8] => 8
  53. )

总结

通过几个简单的实例,我们可以看到,数组函数已经将我们大部分工作给代替了,不用为了实现一个数组排序,而写一大堆代码,我想这应该就是php语言的特点之一,这些函数,有简单获取键名、值的,有复杂的,进行回调处理。包含的东西非常多,在以后的工作当中,肯定会用到的,数组函数是一个很重要的知识块,每天学习一点点,才能在最后用到的时候,想起来有这么一个函数,能够解决这些问题。

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