博客列表 >常用数组函数

常用数组函数

雪~人胖胖
雪~人胖胖原创
2020年04月29日 01:48:46696浏览

1.常用数组函数

  1. <?php
  2. //array_key返回键名 第二个参数返回指定参数的键名
  3. $array = array("blue", "red", "green", "blue", "red");
  4. print_r(array_keys($array, "blue"));
  5. //array_key_exists 返回bool值
  6. $search_array = array('first' => 1, 'second' => 4);
  7. echo array_key_exists('first', $search_array);//1
  8. //array_key_last 获取最后一个键名
  9. echo array_key_last($array);//4
  10. //array_values 返回数组中所有值组成的数组 返回索引数组
  11. print_r(array_values($array));
  12. //in_array检查数组中是否存在某个值返回bool值
  13. echo in_array("blue", $array);//1
  14. //array_search在数组中搜索给定的值,如果成功 返回第一个键名
  15. echo array_search('blue', $array);//0
  16. //array_unique移除数组中重复的值,键名保持不变 只保留第一个键名
  17. //第二个可选参数
  18. // SORT_REGULAR - 按照通常方法比较(不修改类型)
  19. // SORT_NUMERIC - 按照数字形式比较
  20. // SORT_STRING - 按照字符串形式比较
  21. // SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。
  22. print_r(array_unique($array)) ;
  23. //计算数组中的单元数目,或对象中的属性个数
  24. //如果参数既不是数组,也不是实现 Countable 接口的对象,将返回 1 如果 array_or_countable 是 NULL 则结果是 0。
  25. //如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。
  26. echo count($array);//返回5
  27. $food = array('fruits' => array('orange', 'banana'),
  28. 'veggie' => array('carrot', 'collard'));
  29. // 有第二个参数
  30. echo count($food, COUNT_RECURSIVE); // 输出6
  31. echo count($food); // 输出2
  32. //array_count_values() 返回一个数组:数组的键是 array 里单元的值;数组的值是 array 单元的值出现的次数。
  33. print_r(array_count_values($array)) ;
  34. //对数组中所有值求和 ,所有值的和以整数或浮点数的结果返回,array 为空时则返回 0,字符串开头没有数字的按0计算
  35. $res = [1,'2', 'p20', '10p'];
  36. echo array_sum($res); //13
  37. echo array_product($res); //0
  38. //在数组尾部入栈操作
  39. $fruits=[];
  40. array_push($fruits, 'orange' ) ;
  41. array_push($fruits, 'banana', 'apple');
  42. print_r($fruits); //[orange, banana, apple]
  43. //尾部出栈 后进先出
  44. array_pop($fruits);
  45. print_r($fruits); //[orange, banana]
  46. //头部进栈
  47. $fruits=[];
  48. array_unshift($fruits, 'orange');
  49. array_unshift($fruits, 'banana', 'apple');
  50. print_r($fruits);//[banana, apple, orange]
  51. //头部出栈 后进先出
  52. array_shift($fruits);
  53. print_r($fruits);//[apple, orange]
  54. //队列尾部进队 头部出队
  55. $fruits = [];
  56. array_push($fruits, 'orange', 'banana', 'apple');
  57. print_r($fruits);//[orange, banana, apple]
  58. array_shift($fruits);
  59. print_r($fruits);//[ banana, apple]]
  60. //头部进队,尾部出队
  61. $fruits = [];
  62. array_unshift($fruits, 'orange', 'banana', 'apple');
  63. print_r($fruits);//[orange, banana, apple]
  64. array_pop($fruits);
  65. print_r($fruits);//[orange, banana]
  66. //array_rand — 从数组中随机取出一个或多个单元 返回键名
  67. $res = array_rand($array1,2);
  68. print_r($res);
  69. //array_column返回数组中指定的一列
  70. $records = array(
  71. array(
  72. 'id' => 2135,
  73. 'first_name' => 'John',
  74. 'last_name' => 'Doe',
  75. ),
  76. array(
  77. 'id' => 3245,
  78. 'first_name' => 'Sally',
  79. 'last_name' => 'Smith',
  80. ),
  81. array(
  82. 'id' => 5342,
  83. 'first_name' => 'Jane',
  84. 'last_name' => 'Jones',
  85. ),
  86. array(
  87. 'id' => 5623,
  88. 'first_name' => 'Peter',
  89. 'last_name' => 'Doe',
  90. )
  91. );
  92. //以id的值为键名返回last_name这一列的数组
  93. printf('<pre>%s</pre>',print_r(array_column($records,'last_name','id'),true));
  94. //array_replace — 使用传递的数组替换第一个数组的元素 如果传递了多个替换数组,它们将被按顺序依次处理,后面的数组将覆盖之前的值。
  95. $array1 = array("blue", "red", "green", "yellow");
  96. $array2 = [0=>'black', 4=>'white'];
  97. $array3 =[0=>'violet'];
  98. print_r(array_replace($array1,$array2,$array3)) ; //Array ( [0] => violet [1] => red [2] => green [3] => yellow [4] => white )
  99. //array_replace_recursive — 使用传递的数组递归替换第一个数组的元素
  100. $base = array('citrus' => array( "orange") , 'berries' => array("blackberry", "raspberry"), );
  101. $replacements = array('citrus' => array('pineapple'), 'berries' => array('blueberry'));
  102. //递归多维数组
  103. $basket = array_replace_recursive($base, $replacements);
  104. //输出Array ( [citrus] => Array ( [0] => pineapple ) [berries] => Array ( [0] => blueberry [1] => raspberry ) )
  105. print_r($basket);
  106. //直接替换
  107. $basket = array_replace($base, $replacements);
  108. //输出Array ( [citrus] => Array ( [0] => pineapple ) [berries] => Array ( [0] => blueberry ) )
  109. print_r($basket);
  110. //array_intersect — 计算数组的交集,键名保留不变,第一个参数数组作为主值。
  111. $arr1 = ['green','red','blue'];
  112. $arr2 = ['red','white','violet'];
  113. print_r(array_intersect($arr1,$arr2));//Array ( [1] => red )
  114. //array_intersect_assoc — 带索引检查计算数组的交集,索引也比较
  115. $arr1 = ['a'=>'green','b'=>'red','c'=>'blue'];
  116. $arr2 = ['b'=>'red','white','biue'];
  117. print_r(array_intersect_assoc($arr1,$arr2));//Array ( [b] => red )
  118. //array_diff — 计算数组的差集,对比 array1 和其他一个或者多个数组,返回在 array1 中但是不在其他 array 里的值。
  119. $array1 = array("a" => "green", "red", "blue", "red");
  120. $array2 = array("b" => "green", "yellow", "red");
  121. $result = array_diff($array1, $array2);
  122. print_r($result);//Array ( [1] => blue )
  123. //array_diff_assoc() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值,键名也用于比较。
  124. $array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
  125. $array2 = array("a" => "green", "yellow", "red");
  126. $result = array_diff_assoc($array1, $array2);
  127. print_r($result);//Array ( [1] => blue ) Array ( [b] => brown [c] => blue [0] => red )
  128. //array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
  129. $a = array('green', 'red', 'yellow');
  130. $b = array('avocado', 'apple', 'banana');
  131. $c = array_combine($a, $b);
  132. print_r($c);//Array ( [green] => avocado [red] => apple [yellow] => banana )
  133. //array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
  134. $array1 = array("color" => "red", 2, 4);
  135. $array2 = array("a", "b", "color" => "green", 4);
  136. $result = array_merge($array1, $array2);
  137. print_r($result);//Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [4] => 4 )
  138. //array_chunk — 将一个数组分割成多个 ,其中每个数组的单元数目由 size 决定。最后一个数组的单元数目可能会少于 size 个。
  139. $arr3 = ['a','b','c','d','e'];
  140. print_r(array_chunk($arr3,2));// Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [0] => c [1] => d ) [2] => Array ( [0] => e ) )

2.array_slice和array_splice

  1. //1.array_slice — 从数组中取出一段
  2. //最后一个参数为true 键名索引不变
  3. $array1 = array("blue", "red", "green", "yellow");
  4. $res = array_slice($array1, 1,-1,true);
  5. printf('<pre>%s</pre>', print_r($res, true));// array[1=>red, 2=>green]
  6. //2.array_splice — 去掉数组中的某一部分并用其它值取代
  7. array_splice($array, 1,2,['yellow', 'white']);
  8. print_r($array1);
  9. //把green替换成white,black
  10. array_splice($array1,2,1,['white', 'black']);
  11. print_r($array1);
  12. //把索引1到-1不包括-1的值替换
  13. array_splice($array1,1,-1,['white', 'black']);
  14. print_r($array1);
  15. //在开头插入
  16. array_splice($array1,0,0,'white');
  17. print_r($array1);
  18. //尾部插入
  19. array_splice($array1,4,0,'white');
  20. print_r($array1);

3.四个回调

  1. //array_filter — 用回调函数过滤数组中的单元 ,返回计算结果为true的元素组成的数组
  2. //输出奇数
  3. $arr4 = [1,2,3,4,5,6,7,8,9,10];
  4. $res = array_filter($arr4, function($v){
  5. //二进制按位与
  6. return ($v & 1);
  7. });
  8. print_r($res);
  9. //array_map — 为数组的每个元素应用回调函数
  10. function detail($d, $v){
  11. return "这本书是:$d.价格是:$v";
  12. }
  13. $d = ['红鞋子','秘密花园','草房子'];
  14. $v = [30,50,80];
  15. print_r(array_map("detail",$d,$v)) ;
  16. //array_reduce — 用回调函数迭代地将数组简化为单一的值
  17. $array = array(
  18. 0 => array('id' => '100', 'name' => '张三', 'age' => '30'),
  19. 1 => array('id' => '110', 'name' => '李四', 'age' => '33'),
  20. 2 => array('id' => '120', 'name' => '王五', 'age' => '43'),
  21. 3 => array('id' => '130', 'name' => '赵六', 'age' => '53'),
  22. );
  23. $arr = array_reduce($array, function($carry, $item){
  24. $arr = [
  25. 'name'=>$item['name'],
  26. 'age'=>$item['age']
  27. ];
  28. $id = $item['id'];
  29. $carry[$id] = $arr;
  30. return $carry;
  31. });
  32. printf('<pre>%s</pre>',print_r($arr,true)) ;
  33. //array_walk — 使用用户自定义函数对数组中的每个元素做回调处理
  34. // 主要用于数组成员 的格式化, 不受数组指针影响
  35. $arr = ['id' => '100', 'name' => '张三', 'age' => '30'];
  36. // array_walk(数组, 回调,回调的第三个数组的默认值)
  37. array_walk($arr, function($value,$key,$color){
  38. printf('[%s]=><span style="color:%s">%s</span><br>',$key,$color,$value);
  39. },'blue');

图示

感想

数组函数十分多,有一些还不是很清楚,尤其是array_map和array_walk感觉这两个就返回值不同,用法都差不多,需要多写多记

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