博客列表 >PHP:数组函数的应用

PHP:数组函数的应用

夸父逐日
夸父逐日原创
2020年04月25日 19:36:02603浏览

array函数举例

1.array_merge($arr1,$arr2,$arr3,…)用于合并多个数组
  1. $arr1 = [2,3,4,5,6,7,8];
  2. $arr2 = ['a','b','c','d','e'];
  3. $arr3 = ['hi','bob'];
  4. printf("<pre>%s</pre>", print_r(array_merge($arr1,$arr2,$arr3), true));
  5. # 结果是:
  6. Array
  7. (
  8. [0] => 2
  9. [1] => 3
  10. [2] => 4
  11. [3] => 5
  12. [4] => 6
  13. [5] => 7
  14. [6] => 8
  15. [7] => a
  16. [8] => b
  17. [9] => c
  18. [10] => d
  19. [11] => e
  20. [12] => hi
  21. [13] => bob
  22. )
2.array_chunk($arr, $size, $bool)用于拆分数组。第一个参数是拆分的数组,第二个拆分完后子数组元素的个数,第三个true的话就保留键不变,否则重置键。
  1. $arr1 = [2,3,4,5,6,7,8];
  2. printf("<pre>%s</pre>", print_r(array_chunk($arr1, 3,true),true));
  3. 结果是:
  4. Array
  5. (
  6. [0] => Array
  7. (
  8. [0] => 2
  9. [1] => 3
  10. [2] => 4
  11. )
  12. [1] => Array
  13. (
  14. [3] => 5
  15. [4] => 6
  16. [5] => 7
  17. )
  18. [2] => Array
  19. (
  20. [6] => 8
  21. )
  22. )

3.range($start, $end, $step)用于生成数组。
  1. printf("<pre>%s</pre>", print_r(range(1,11,3),true));
  2. # 结果是:
  3. Array
  4. (
  5. [0] => 1
  6. [1] => 4
  7. [2] => 7
  8. [3] => 10
  9. )
array_fill($index,$number,$value)第一个参数是新数组其实索引,第二个是插入新数组的元素个数,第三个参数是插入新数组的值。
  1. printf("<pre>%s</pre>", print_r(array_fill(4,4,[1,2]),true));
  2. #结果是:
  3. Array
  4. (
  5. [4] => Array
  6. (
  7. [0] => 1
  8. [1] => 2
  9. [2] => 3
  10. [3] => 4
  11. )
  12. [5] => Array
  13. (
  14. [0] => 1
  15. [1] => 2
  16. [2] => 3
  17. [3] => 4
  18. )
  19. [6] => Array
  20. (
  21. [0] => 1
  22. [1] => 2
  23. [2] => 3
  24. [3] => 4
  25. )
  26. [7] => Array
  27. (
  28. [0] => 1
  29. [1] => 2
  30. [2] => 3
  31. [3] => 4
  32. )
  33. )
5.array_fill_keys($key,$value)用于生成指定键的数组
  1. printf("<pre>%s</pre>", print_r(array_fill_keys([3,4,5,6,7],4),true));
  2. 结果是:
  3. Array
  4. (
  5. [3] => 4
  6. [4] => 4
  7. [5] => 4
  8. [6] => 4
  9. [7] => 4
  10. )
6.array_rand($arr, $number)用于从数组里随机取出$number 个元素,如果$number超出元素个数的话就会报错
  1. $arr1 = [2,3,4,5,6,7,8];
  2. printf("<pre>%s</pre>", print_r(array_rand($arr1,3),true));
  3. # 结果是:
  4. Array
  5. (
  6. [0] => 3
  7. [1] => 4
  8. [2] => 6
  9. )
7.array_column($arr,$column,$index_key),用于从二维数组或者更加高维的数组中提取某一列生成新的数组。$arr表示原数组,$column表示从哪一列提取,如果没有的话就返回null。$index_key表示生成数组的key。如果是数组的话就从0开始往下排。
  1. $arr = [];
  2. $arr[] = ['a','b','c','d'];
  3. $arr[] = ['h',[3,4,5],'f','e'];
  4. $arr[] = [1,2,3,4,5,6];
  5. printf("<pre>%s</pre>", print_r(array_column($arr,1,1),true));
  6. # 结果是:
  7. Array
  8. (
  9. [b] => b
  10. [0] => Array
  11. (
  12. [0] => 3
  13. [1] => 4
  14. [2] => 5
  15. )
  16. [2] => 2
  17. )
8.array_replace($arr1,$arr2,$arr3,…)替换值。第二个数组替换第一个数组对应键的值。后面的数组同样如此替换$arr1的值。
  1. $arr1 = [2,3,4,5,6,7,8];
  2. $arr2 = ['a','b','c','d','e'];
  3. printf("<pre>%s</pre>", print_r(array_replace($arr1,$arr2),true));
  4. # 结果是:
  5. Array
  6. (
  7. [0] => a
  8. [1] => b
  9. [2] => c
  10. [3] => d
  11. [4] => e
  12. [5] => 7
  13. [6] => 8
  14. )
9.array_intersect($arr1,$arr2,$arr3,…)求出$arr1,$arr2,$arr3共有的元素,不比较键。array_intersect_assoc()既比较键名也比较键值。
  1. $arr1 = [2,3,4,5,6,7,8];
  2. $arr2 = [1,3,4,5];
  3. printf("<pre>%s</pre>", print_r(array_intersect($arr1,$arr2),true));
  4. # 结果是:
  5. Array
  6. (
  7. [1] => 3
  8. [2] => 4
  9. [3] => 5
  10. )
10.array_diff($arr1,$arr2,$arr3,…)返回只存在于$arr1,而不存在于其他数组的元素值。不比较键名,键名不会发生改变,只比较键值。array_diff_assoc().
  1. $arr1 = [2,3,4,5,6,7,8];
  2. $arr2 = [1,3,4,5];
  3. printf("<pre>%s</pre>", print_r(array_diff($arr1,$arr2),true));
  4. # 结果是:
  5. Array
  6. (
  7. [0] => 2
  8. [4] => 6
  9. [5] => 7
  10. [6] => 8
  11. )

回调函数

1.array_reduce($array, $function, [$init])。$array表示数组。$function代表可以回调的函数。该函数至多两个参数。$init表示初始值。如果$init不是null,那么会作为数组的第一个值,或当数组是空数组时,作为array_reduce()的返回值。

  1. $arr1 = [2,3,4,5,6,7,8];
  2. print_r(array_reduce($arr1, function($v1, $v2){
  3. return $v1 - $v2;
  4. }));
  5. # 结果是: -35(0-2-3-4-5-6-7-8)
  6. 如果我们给一个初始值:
  7. $arr1 = [2,3,4,5,6,7,8];
  8. print_r(array_reduce($arr1, function($v1, $v2){
  9. return $v1 - $v2;
  10. },6));
  11. # 结果是: -29 (6-2-3-4-5-6-7-8)
  12. 或者改为字符串拼接
  13. $arr1 = [2,3,4,5,6,7,8];
  14. print_r(array_reduce($arr1, function($v1, $v2){
  15. return $v1.$v2;
  16. },6));
  17. # 结果是:62345678

array_filter($array, $function, [$flag]).第一个参数表示数组,第二个参数表示回调函数,当回调函数返回结果bool是真时,将真的$array的键和值放入返回数组中去。$flag有两个值。分别是:ARRAY_FILTER_USE_BOTH(1),ARRAY_FILTER_USE_KEY(2).如果是1,将数组里的键名和键值都传入回调函数中去。2就只传键名。

  1. $arr1 = [1,2,3,4,0];
  2. print_r(array_filter($arr1, function($key,$value){
  3. return $key * $value;
  4. },ARRAY_FILTER_USE_BOTH));
  5. # 结果是:
  6. Array ( [1] => 2 [2] => 3 [3] => 4 )
  7. $arr1 = [1,2,3,4,0];
  8. print_r(array_filter($arr1, function($key){
  9. return $key;
  10. },ARRAY_FILTER_USE_KEY));
  11. # 结果是:
  12. Array ( [1] => 2 [2] => 3 [3] => 4 [4] => 0 )

3.array_map($function, $arr1,$arr2,…)$function 表示可回调的函数,其参数个数与后面传入的数组个数有关。多少个数组就至多可以传入多少个参数。$arr的键值作为参数调入回调函数中。

  1. $arr1 = [1,2,3,4,0];
  2. $arr2 = [2,3,4,5,6];
  3. print_r(array_map(function($value1,$value2){
  4. return $value1 * $value2;
  5. },$arr1,$arr2));
  6. # 结果是:
  7. Array ( [0] => 2 [1] => 6 [2] => 12 [3] => 20 [4] => 0 )

array_walk($array, $function, [$userdata]) $array表示传入的数组。$function有三个参数,第一、二个分别是传入数组的键值和键名,第三个是$userdata,可有可无。返回结果是bool值。如果函数执行成功返回bool真值。

  1. $arr2 = [2,3,4,5,6];
  2. echo array_walk($arr2,function($value, $key){
  3. return "[$key]=>[$value]<br />";
  4. });
  5. # 结果是: 1
  6. $arr2 = [2,3,4,5,6];
  7. echo array_walk($arr2,function($value, $key, $user){
  8. return $value * $key * $user;
  9. }, 0);
  10. # 结果是: 1
  11. $arr2 = [2,3,4,5,6];
  12. array_walk($arr2,function($value, $key, $user){
  13. echo $value * $key * $user, "<br />";
  14. }, 0);
  15. # 结果是:
  16. 0
  17. 0
  18. 0
  19. 0
  20. 0

array_slice()和array_splice()很相似。一个用于从数组中取值,一个用于对数组进行增删修改。

array_slice($array, $offset, $length, $preserve_key) 第一个表示数组,第二个参数表示从第几个元素开始切片,可以是负值,负值表示倒数几个元素。第三个参数表示切片长度,正值表示长度,负值表示到倒数几个元素(不包括该元素)。第四个参数表示保持键名不变。

  1. $arr1 = [1,2,3,4,5];
  2. print_r(array_slice($arr1, 2,2,true));
  3. # 结果是:Array ( [2] => 3 [3] => 4 )
  4. $arr1 = [1,2,3,4,5];
  5. print_r(array_slice($arr1, -5,-1,true))
  6. # 结果是:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )

array_splice($array, $offset, $length, $replace_arr).前三个参数与array_slice()意义一样。第四个参数表示替换的数组,如果数组只有一个值,可以用字符串代替。

  1. $arr1 = [1,2,3,4,5];
  2. print_r(array_splice($arr1,0,2,[1,23,4,5,7,8]));
  3. echo "<hr />";
  4. print_r($arr1);
  5. # 结果是:
  6. [0] => 1 [1] => 2 )
  7. Array ( [0] => 1 [1] => 23 [2] => 4 [3] => 5 [4] => 7 [5] => 8 [6] => 3 [7] => 4 [8] => 5 )
  8. [0] => 1 [1] => 2 )
  9. Array ( [0] => 1 [1] => 23 [2] => 4 [3] => 5 [4] => 7 [5] => 8 [6] => 3 [7] => 4 [8] => 5 )
  10. # 结果是:
  11. )
  12. Array ( [0] => 1 [1] => 1 [2] => 23 [3] => 4 [4] => 5 [5] => 7 [6] => 8 [7] => 2 [8] => 3 [9] => 4 [10] => 5 )
  13. $arr1 = [1,2,3,4,5];
  14. print_r(array_splice($arr1,-3,0,'bob'));
  15. echo "<hr />";
  16. print_r($arr1);
  17. # 结果是:
  18. Array ( )
  19. Array ( [0] => 1 [1] => 2 [2] => bob [3] => 3 [4] => 4 [5] => 5 )
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议