欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

常用数组函数-创建-删除-键值操作-回调函数

程序员文章站 2022-03-13 13:45:22
...

常用数组函数-创建-删除-键值操作-回调函数

1. 创建数组

  1. // 1. 创建数组
  2. echo "1. 创建数组<br>";
  3. // 1.1 字面量
  4. $arr = ['a', 1, 2];
  5. // Array ( [0] => a [1] => 1 [2] => 2 )
  6. echo print_r($arr, true), '<br>';
  7. // 1.2 索引创建
  8. $arr[3] = 'b';
  9. // Array ( [0] => a [1] => 1 [2] => 2 [3] => b )
  10. echo print_r($arr, true), '<br>';
  11. // 1.2 函数创建
  12. $arr = array(1, 2, 3);
  13. // Array ( [0] => 1 [1] => 2 [2] => 3 )
  14. echo print_r($arr, true), '<br>';
  15. // 1.3 填充创建
  16. $arr = range('a', 'f', 2);
  17. // Array ( [0] => a [1] => c [2] => e )
  18. echo print_r($arr, true), '<br>';
  19. // 1.4 位置添加
  20. // 1.4.1 头部添加
  21. $n = array_unshift($arr, 1, 2);
  22. // $n = 5; Array ( [0] => 1 [1] => 2 [2] => a [3] => c [4] => e )
  23. echo "\$n = $n; ", print_r($arr, true), '<br>';
  24. // 1.4.2 尾部添加
  25. $n = array_push($arr, 'g', 'h');
  26. // $n = 7; Array ( [0] => 1 [1] => 2 [2] => a [3] => c [4] => e [5] => g [6] => h )
  27. echo "\$n = $n; ", print_r($arr, true), '<br>';
  28. echo '<hr>';

2. 删除数组

  1. // 2. 删除数组
  2. echo "2. 删除数组<br>";
  3. // 2.1 头部删除
  4. $a = array_shift($arr);
  5. $b = array_shift($arr);
  6. // $a = 1, $b = 2; Array ( [0] => a [1] => c [2] => e [3] => g [4] => h )
  7. echo "\$a = $a, \$b = $b; ", print_r($arr, true), '<br>';
  8. // 2.2 尾部删除
  9. $a = array_pop($arr);
  10. $b = array_pop($arr);
  11. // $a = h, $b = g; Array ( [0] => a [1] => c [2] => e )
  12. echo "\$a = $a, \$b = $b; ", print_r($arr, true), '<br>';
  13. // 2.3.1 位置删除
  14. // 第1位置删2个
  15. $arr1 = array_splice($arr, 1, 2);
  16. // Array ( [0] => c [1] => e ) ; Array ( [0] => a )
  17. echo print_r($arr1, true), '; ', print_r($arr, true), '<br>';
  18. // 2.3.2 位置插入
  19. // 位置1插入数组
  20. $arr2 = array_splice($arr, 1, 0, ['c', 'b']);
  21. // Array ( ) ; Array ( [0] => a [1] => c [2] => b )
  22. echo print_r($arr2, true), '; ', print_r($arr, true), '<br>';
  23. // 2.3.3 更新数组
  24. // 位置1开始两个元素,更新数组 ['b', 'c'] 含两个元素
  25. $arr3 = array_splice($arr, 1, 2, ['b', 'c']);
  26. // Array ( [0] => c [1] => b ) ; Array ( [0] => a [1] => b [2] => c )
  27. echo print_r($arr3, true), '; ', print_r($arr, true), '<br>';
  28. echo '<hr>';

3. 数组指针

  1. // 3. 数组指针
  2. echo "3. 数组指针<br>";
  3. // 0 => a
  4. echo key($arr) .' => '. current($arr) .'<br>';
  5. // 后一个
  6. next($arr);
  7. next($arr);
  8. // 2 => c
  9. echo key($arr) .' => '. current($arr) .'<br>';
  10. // 前一个
  11. prev($arr);
  12. // 1 => b
  13. echo key($arr) .' => '. current($arr) .'<br>';
  14. // 第一个
  15. reset($arr);
  16. // 0 => a
  17. echo key($arr) .' => '. current($arr) .'<br>';
  18. // 最后一个
  19. end($arr);
  20. // 2 => c
  21. echo key($arr) .' => '. current($arr) .'<br>';
  22. echo '<hr>';

4. 键值操作

  1. // 4. 键值操作
  2. echo "4. 键值操作<br>";
  3. // 取键数组
  4. $keys = array_keys($arr);
  5. // Array ( [0] => 0 [1] => 1 [2] => 2 )
  6. echo print_r($keys, true), '<br>';
  7. // 取值数组
  8. $values = array_values($arr);
  9. // Array ( [0] => a [1] => b [2] => c )
  10. echo print_r($values, true), '<br>';
  11. // 判断键存在
  12. // key = 2, exist : true
  13. echo 'key = 2, exist : ', var_export(array_key_exists(2, $arr), true), '<br>';
  14. // 判断值存在
  15. // value = 'b', exist : true
  16. echo 'value = \'b\', exist : ', var_export(in_array('b', $arr), true), '<br>';
  17. // 数组搜索
  18. $pos1 = array_search('b', $arr);
  19. $pos2 = array_search('z', $arr);
  20. // 'b' index : 1
  21. echo "'b' index : ", var_export($pos1, true) .'<br>';
  22. // 'z' index : false
  23. echo "'z' index : ", var_export($pos2, true) .'<br>';
  24. echo '<hr>';

5. 数组回调

  1. // 5. 数组回调
  2. echo "5. 数组回调<br>";
  3. // 5.1 数组漫步
  4. $bool = array_walk($arr, function(&$value, $key, $userdata){
  5. if ($key === 0) $value = $userdata[0] .'-'. $value;
  6. if ($value === 'b') $value = $userdata[1];
  7. if ($value === 'c') $value .= '-'. $userdata[2];
  8. }, ['prefix', '', 'suffix']);
  9. // $bool = true; Array ( [0] => prefix-a [1] => [2] => c-suffix )
  10. echo '$bool = ', var_export($bool, true), '; ', print_r($arr, true), '<br>';
  11. // 5.2 数组过滤
  12. // 5.2.1 过滤空值
  13. $arr = array_filter($arr);
  14. // Array ( [0] => prefix-a [2] => c-suffix )
  15. echo print_r($arr, true), '<br>';
  16. // 5.2.2 条件过滤
  17. // 过滤值中包含字符串 fix 的元素组成的数组
  18. $arr = array_filter($arr, function($value){
  19. return false !== stripos($value, 'fix');
  20. });
  21. // Array ( [0] => prefix-a [2] => c-suffix )
  22. echo print_r($arr, true), '<br>';
  23. // 5.3 数组遍历
  24. // 5.3.1 批量导入
  25. $map_arr1 = array_map(function($file){
  26. // 批量导入
  27. //require $file;
  28. // 返回文件名
  29. return basename($file);
  30. }, glob(__DIR__ .'/012*.php'));
  31. // 当前目录下 012开头且 .php 结尾的文件名
  32. // Array ( [0] => 0125.php [1] => 0126.php [2] => 0127.php [3] => 0128.php [4] => 0129.php )
  33. echo print_r($map_arr1, true), '<br>';
  34. // 5.3.2 批量计算
  35. $arr1 = [1, 2, 3];
  36. $arr2 = [3, 2, 1];
  37. $map_arr2 = array_map(function($a, $b){
  38. return $a * $b;
  39. }, $arr1, $arr2);
  40. // 两个数组,各自项目乘积组成的数组
  41. // Array ( [0] => 3 [1] => 4 [2] => 3 )
  42. echo print_r($map_arr2, true), '<br>';
  43. // 5.4 数组归并
  44. // 5.4.1 数组求和
  45. $arr_reduce1 = array_reduce($map_arr2, function($prev, $next){
  46. return $prev + $next;
  47. });
  48. echo "array_sum : $arr_reduce1<br>";
  49. // 5.4.2 多数组分列求和
  50. $arr_reduce2 = array_reduce([$arr1, $arr2], function($prev, $next){
  51. return array_map(function($a, $b){
  52. return $a + $b;
  53. }, $prev, $next);
  54. }, [0, 0, 0]);
  55. // Array ( [0] => 4 [1] => 4 [2] => 4 )
  56. echo print_r($arr_reduce2, true);
  • 以上1~5例程实例图

常用数组函数-创建-删除-键值操作-回调函数