博客列表 >服务端 - PHP - 数组函数

服务端 - PHP - 数组函数

郴
原创
2020年04月27日 12:29:44741浏览

服务端 - PHP - 数组函数

一、10个函数例子

1. array_column():获取多维数组中一列组成的新数组

  • 语法:array_column(array,column_key,index_key)

  • array:必需。指定要使用的多维数组(记录集)

  • column_key:必需。需要返回值的列

  • index_key:可选。作为返回数组的索引/键的列

  • 返回值:返回一个数组,数组的值为输入数组中某个单一列的值

  1. $arr = [
  2. ['name'=>'小明', 'sex'=>'男', 'age'=>18 ],
  3. ['name'=>'小红', 'sex'=>'女', 'age'=>16 ],
  4. ['name'=>'小王', 'sex'=>'男', 'age'=>17 ]
  5. ];
  6. $newArr = array_column($arr, 'sex', 'name');
  7. echo '<pre>';
  8. print_r($newArr);
  9. echo '</pre>';

2. array_replace_recursive():使用传递的数组递归替换第一个数组的元素

  • 语法:array_replace_recursive(array1,array2,array3…)

  • array1:必需。指定一个数组

  • array2:可选。指定一个要替换 array1 的值的数组

  • array3:可选。指定多个要替换 array1 和 array2, … 的值的数组。后面数组的值将覆盖之前数组的值

  • 返回值:返回被替换的数组,如果发生错误则返回 NULL

  1. $arr1 = [
  2. ['name'=>'小明', 'sex'=>'男', 'age'=>18 ],
  3. ['name'=>'小红', 'sex'=>'女', 'age'=>16 ],
  4. ['name'=>'小王', 'sex'=>'男', 'age'=>17 ]
  5. ];
  6. $arr2 = [
  7. ['name'=>'小茜', 'sex'=>'女', 'age'=>17 ],
  8. ['name'=>'小华', 'sex'=>'男', 'age'=>19 ],
  9. ['name'=>'小赵', 'sex'=>'男', 'age'=>18 ]
  10. ];
  11. $newArr1 = array_replace_recursive($arr1, $arr2);
  12. echo '<pre>';
  13. print_r($newArr1);
  14. echo '</pre>';

3. array_intersect():计算数组的交集

  • 语法:array_intersect(array1,array2,array3…)

  • array1:必需。与其他数组进行比较的第一个数组

  • array2:必需。与第一个数组进行比较的数组

  • array3:可选。与第一个数组进行比较的其他数组

  • 返回值:返回一个交集数组,该数组包括了所有在被比较的数组(array1)中,同时也在任何其他参数数组(array2 或 array3 等等)中的键值

  1. $arr3 = ['name'=>'小明', 'sex'=>'男', 'age'=>18 ];
  2. $arr4 = ['name'=>'小红', 'sex'=>'女', 'age'=>18 ];
  3. $newArr2 = array_intersect($arr3, $arr4);
  4. echo '<pre>';
  5. print_r($newArr2);
  6. echo '</pre>';

4. array_diff():返回数组的差集

  • 语法:array_diff(array1,array2,array3…)

  • array1:必需。与其他数组进行比较的第一个数组

  • array2:必需。与第一个数组进行比较的数组

  • array3:可选。与第一个数组进行比较的其他数组

  • 返回值:返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的值

  1. $arr5 = ['name'=>'小明', 'sex'=>'男', 'age'=>18, 'email'=>'xiaoming@qq.com' ];
  2. $arr6 = ['name'=>'小红', 'sex'=>'女', 'age'=>18 ];
  3. $arr7 = ['name'=>'小赵', 'sex'=>'男', 'age'=>18 ];
  4. $newArr3 = array_diff($arr5, $arr6, $arr7);
  5. echo '<pre>';
  6. print_r($newArr3);
  7. echo '</pre>';

5. array_merge():把一个或多个数组合并为一个数组

  • 语法:array_merge(array1,array2,array3…)

  • array1:必需。规定数组

  • array2:可选。规定数组

  • array3:可选。规定数组

  • 返回值:返回合并的数组

  1. $arr8 = ['name'=>'小明', 'sex'=>'男', 'age'=>18 ];
  2. $arr9 = ['phone'=>'13785459358', 'email'=>'xiaoming@qq.com', 'address'=>'北京'];
  3. $newArr4 = array_merge($arr8, $arr9);
  4. echo '<pre>';
  5. print_r($newArr4);
  6. echo '</pre>';

6. array_chunk():把一个数组分割成多个子数组

  • 语法:array_chunk(array,size,preserve_keys)

  • array1:必需。规定要使用的数组

  • size:必需。一个整数,规定每个新数组块包含多少个元素

  • preserve_keys:可选。布尔值,rue - 保留原始数组中的键名,false - 默认。每个新数组块使用从零开始的索引

  • 返回值:返回一个多维的数值数组,从 0 开始,每个维度都包含 size 元素

  1. $arr10 = ['name'=>'小明', 'sex'=>'男', 'age'=>18, 'phone'=>'13785459358', 'email'=>'xiaoming@qq.com', 'address'=>'北京' ];
  2. $newArr5 = array_chunk($arr10, 3, true);
  3. echo '<pre>';
  4. print_r($newArr5);
  5. echo '</pre>';

7. array_fill():用给定的值填充数组

  • 语法:array_fill(index,number,value)

  • index:必需。规定返回数组的起始索引

  • number:必需。规定填充的元素的数量,其值必须大于 0

  • value:可选。必需。规定用于填充数组的键值

  • 返回值:返回填充的数组

  1. $arr11 = array_fill(2, 4, '你好');
  2. echo '<pre>';
  3. print_r($arr11);
  4. echo '</pre>';

8. array_fill_keys():使用指定的键和值填充数组

  • 语法:array_fill_keys(keys,value)

  • keys:必需。数组,其值将被用于填充数组的键名

  • value:必需。规定用于填充数组的键值

  • 返回值:返回填充的数组

  1. $keys = ['n1', 'n2', 'n3'];
  2. $arr12 = array_fill_keys($keys, 18);
  3. echo '<pre>';
  4. print_r($arr12);
  5. echo '</pre>';

9. array_pad():将指定数量的带有指定值的元素插入到数组中

  • 语法:array_pad(array,size,value)

  • array:必需。数组,其值将被用于填充数组的键名

  • size:必需。规定用于填充数组的键值

  • value:必需。规定从函数返回的数组中新元素的值

  • 返回值:返回带有新元素的数组

  1. $arr13 = ['小明', '男', 18];
  2. $newArr6 = array_pad($arr13, 5, 13785459358);
  3. echo '<pre>';
  4. print_r($newArr6);
  5. echo '</pre>';

10. extract():将关联数组拆分成变量名值对

  • 语法:extract(array,extract_rules,prefix)

  • array:必需。规定要使用的数组

  • extract_rules:可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中已存在的变量名是否冲突。

  • prefix:可选。规定前缀,前缀和数组键名之间会自动加上一个下划线

  • 返回值:返回成功设置的变量数目

  1. $arr14 = ['name'=>'小明', 'sex'=>'男', 'age'=>18, 'phone'=>'13785459358'];
  2. extract($arr14);
  3. echo "<br>\$name = $name; \$sex = $sex; \$age = $age; \$phone = $phone";

二、4个数组回调函数

1. array_filter():用回调函数过滤数组中的单元

  • 语法:array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

  • array:必需。规定要过滤的数组

  • callback:可选。规定要用的回调函数

  • flag:可选。决定 callback 接收的参数形式,ARRAY_FILTER_USE_KEY - callback 接受键名作为的唯一参数,ARRAY_FILTER_USE_BOTH - callback 同时接受键名和键值

  • 返回值:返回过滤的数组

  1. $arr = [10, 11, 12, 13, 14, 15];
  2. $newArr = array_filter($arr, function($n){
  3. return $n > 11 && $n < 14;
  4. });
  5. echo '<pre>';
  6. print_r($newArr);
  7. echo '</pre>';

2. array_map():同时为多个数组的每个元素应用回调函数

  • 语法:array_map(myfunction,array1,array2,array3…)

  • myfunction:必需。用户自定义函数的名称,或者是 null

  • array1:必需。规定数组

  • array2:必需。规定数组

  • array3:必需。规定数组

  • 返回值:返回包含用户自定义函数作用后的 array1 的值的数组

  1. $arr1 = [10, 11, 12, 13, 14, 15];
  2. $arr2 = [15, 16, 17, 18, 19, 21];
  3. echo '<pre>';
  4. print_r(array_map(function($n1, $n2){
  5. if ($n2 - $n1 === 5) {
  6. return '等于5';
  7. } else {
  8. return "不等于5";
  9. };
  10. }, $arr1, $arr2));
  11. echo '</pre>';

3. array_walk():使用用户自定义函数对数组中的每个元素做回调处理

  • 语法:array_walk(array,myfunction,parameter…)

  • array:必需。规定数组

  • myfunction:必需。用户自定义函数的名称

  • parameter…:可选。规定用户自定义函数的参数,您可以为函数设置一个或多个参数

  • 返回值:如果成功则返回 TRUE,否则返回 FALSE

  1. $arr3 = ['name'=>'小明', 'sex'=>'男', 'age'=>18];
  2. function callback(&$value, $key) {
  3. switch ($key) :
  4. case $key === 'name':
  5. return $value = '小红';
  6. case $key === 'sex':
  7. return $value = '女';
  8. case $key === 'age':
  9. return $value = 17;
  10. default:
  11. echo 'error';
  12. endswitch;
  13. }
  14. if (array_walk($arr3, 'callback')){
  15. echo '<pre>';
  16. print_r($arr3);
  17. echo '</pre>';
  18. } else {
  19. echo 'failed';
  20. };
  21. echo '4. array_reduce():迭代处理数组元素';

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

  • 语法:array_reduce(array,myfunction,initial)

  • array:必需。规定数组

  • myfunction:必需。规定函数的名称

  • initial:可选。规定发送到函数处理的第一个值

  • 返回值:返回结果值

  1. echo '<br>';
  2. $arr4 = ['小明', '小红', '小王'];
  3. function callback1($v1, $v2) {
  4. return $v1.','.$v2;
  5. }
  6. echo array_reduce($arr4, 'callback1', '姓名:');

三、array_slice()与array_splice()

1. array_slice():从数组中取出一部分

  • 语法:array_slice(array,start,length,preserve)

  • array:必需。规定数组

  • start,:必需。数值。规定取出元素的开始位置

  • length:可选。数值。规定被返回数组的长度

  • preserve:可选。规定函数是保留键名还是重置键名

  • 返回值:返回数组中的选定部分

  1. $arr = ['name'=>'小明', 'sex'=>'男', 'age'=>18, 'phone'=>'13785459358', 'email'=>'xiaoming@qq.com', 'address'=>'北京' ];
  2. echo '<pre>';
  3. print_r(array_slice($arr, 3, 2, true));
  4. echo '</pre>';

2. array_splice():去掉数组中一部分并用其他值代替

  • 语法:array_splice(array,start,length,array)

  • array:必需。规定数组

  • start,:必需。数值。规定删除元素的开始位置

  • length:可选。数值。规定被移除的元素个数

  • array:可选。规定带有要插入原始数组中元素的数组

  • 返回值:返回包含被提取元素的数组

  1. $arr1 = ['name'=>'小明', 'sex'=>'男', 'age'=>18, 'phone'=>'13785459358', 'email'=>'xiaoming@qq.com', 'address'=>'北京' ];
  2. array_splice($arr1, 3, 2, ['school'=>'北京大学', 'class'=>'软件工程一班']);
  3. echo '<pre>';
  4. print_r($arr1);
  5. echo '</pre>';

四、课程总结

  • 今天学习了 PHP 的数组函数,通过上课认真听讲和认真完成老师布置的作业,使得我对 PHP 的理解和运用更加深入和熟悉。最主要的知识点是明白和掌握了array_splice()、array_map()等函数的用法。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议