博客列表 >数组的概述和分类

数组的概述和分类

我是郭富城
我是郭富城原创
2020年04月29日 03:06:581476浏览

数组的概述和分类

以下内容为两天课堂上讲的知识结构,作业在最后面进行演示和总结,本篇文章主要是展示数组的大概学习内容,以及对一些难点和课堂作业进行演示,课堂的案例不演示。

1. 索引数组与关联数组

  • 索引数组索引键名是数值
  • 关联数组:键名用非数字的字符串来表示

    可以认为索引数组是关联数组的子集, 一个分支

2. 数组的定义和访问

  • 传统定义 array()
  • 推荐使用[…], 和 javascript 一样的

数组成员的类型,类型不受限制
数组的值如果是数组,就属于多维数组

3. 数组遍历

3.1 逐个遍历

  • 利用数组内部的指针(默认第一个)
  • current():当前数组成员中的值,key()

3.2 自动遍历

  • while 循环(数组元素不能出现假值)
  • foreach(),一般遍历二维数组只关心值
  • list()

foreach()还可以遍历对象

4. 与值相关的函数

  • array_values(\$arr):返回数据中所有成员的值组成的数组,会将键名重置
  • in_array(\$search, \$arr): 检查某个元素是否存在于指定的数组中
  • array_search(\$search, \$arr): 搜索指定的值, 返回的是键名
  • array_unique(\$arr): 删除重复的值, “去重”函数

5. 数组常用函数

5.1 统计相关函数

  • count(\$arr): 数组成员数量
  • array_count_values(\$arr): 统计数组中某个值的出现的频率

5.2 计算相关函数

  • array_sum() 数组求和
  • array_product()计算乘积

6. 栈与队列

  • 栈类似于搬箱子,最后进入的最先出来
  • 尾部添加进栈函数 array_push(),出栈函数 array_pop()
  • 头部添加进栈函数 array_unshift(),出栈函数 array_shift()
  • 队列类似于排队,最先办理的最先离开

7.排序

7.1 升序

  • sort(),升序索引重置
  • asort(),升序,但索引不变

7.2 降序

  • rsort()降序索引重置
  • arsort()降序索引不变

7.3 键排序

  • ksort()对键名进行升序排列
  • krsort()对键名进行降序排列

7.4 自定义排序

  • usort()

7.5 自然排序

  • natsort()

    nature 自然

7.6 乱序

  • shuffle()

7.7 反转排序

  • array_reverse()

7.8 键值对换排序

  • array_flip()

8. 查询与替换

8.1 array_slice()从数组中取出一部分

8.2 array_splice()删除一部分元素,并用其他值代替

  • 可以实现对数组的删除,替换/更新,添加
  • array_splice(\$arr,起始索引,数量),返回被删除元素组成的数组

9. 数组元素的回调处理

9.1 array_filter()

  • 过滤数组中的单元,返回计算结果为 true 的元素构成新的数组

9.2 array_map()

  • 为数组中的每一个元素应用回调函数处理,返回新数组
  • 可以同时处理多个数组,功能强大

9.3 array_reduce()

  • 迭代处理数组元素

9.4 array_walk()

  • 类似 array_map(),凡是返回布尔值
  • 主要用于数组成员的格式化
  • 不受数组指针影响

作业一 课堂上未讲的数组函数练习

与键相关的函数

  • array_keys()获取所有键名组成的数组
  • array_key_exists 是否存在指定的键名
  • array_key_first()获取第一个键名
  • array_key_last()获取最后一个键名

    最后两个函数只能用于 php7.3+

  1. <?php
  2. //与键相关的函数
  3. $arr = ['id' => '597826', 'name' => 'nicola', 'teacher' => 'peter zhu', 'course' => 'php'];
  4. $res = print_r(array_keys($arr), true);
  5. printf('<pre>%s</pre>', $res);
  6. //是否存在指定的键名
  7. echo '是否存在teacher这个键名?';
  8. var_dump(array_key_exists('teacher', $arr));
  9. //只能用于最新的php7.3+
  10. echo '<hr>';
  11. echo array_key_first($arr);
  12. echo '<hr>';
  13. echo array_key_last($arr);

查询与替换

  • array_rand()从数组中随机取出一个或者多个键名组成新的数组
  • array_column()获取多维数组中的一列组成新的数组
  • array_replace()使用第二个数组(\$a2)的值替换第一个数组(\$a1)的值:
  • array_replace_recursive()递归地使用第二个数组(\$a2)的值替换第一个数组(\$a1)的值:
  1. //从数组中随机取出一个或者多个键名组成新的数组
  2. reset($arr);
  3. $arr = ['id' => '597826', 'name' => 'nicola', 'teacher' => 'peter zhu', 'course' => 'php'];
  4. echo '从数组中随机取出一个或者多个键名组成新的数组';
  5. echo '<br>';
  6. print_r(array_rand($arr, 2));
  7. echo '<hr>';
  8. //array_column()获取多维数组中的一列组成新的数组
  9. $arr = [
  10. ['id' => '597826', 'name' => 'nicola', 'teacher' => 'peter zhu', 'course' => 'php'],
  11. ['id' => '123', 'name' => '尼古拉', 'teacher' => '朱老师', 'course' => '编程'],
  12. ['id' => '312321', 'name' => '尼古拉同学', 'teacher' => 'php中文网的朱老师', 'course' => 'php'],
  13. ];
  14. $res = print_r($arr, true);
  15. printf('<pre>%s</pre>', $res);
  16. array_column($arr, 'teacher');
  17. $res = print_r(array_column($arr, 'teacher'), true);
  18. printf('<pre>%s</pre>', $res);
  19. echo '<hr>';
  20. // array_replace()使用第二个数组($a2)的值替换第一个数组($a1)的值:
  21. $arr1 = ['id' => '597826', 'name' => 'nicola'];
  22. $arr2 = ['id' => '1233', 'name' => '尼古拉'];
  23. $arr = array_replace($arr1, $arr2);
  24. $res = print_r($arr, true);
  25. printf('<pre>%s</pre>', $res);
  26. // array_replace_recursive()递归地使用第二个数组($a2)的值替换第一个数组($a1)的值:
  27. $a1 = ['id' => '597826', 'name' => ['尼古拉', '特斯拉']];
  28. $a2 = ['id' => '123456', 'name' => ['nicola']];
  29. $res1 = print_r($a1, true);
  30. echo '原始数组1';
  31. printf('<pre>%s</pre>', $res1);
  32. $res2 = print_r($a2, true);
  33. echo '原始数组2';
  34. printf('<pre>%s</pre>', $res2);
  35. $res = print_r(array_replace_recursive($a1, $a2), true);
  36. echo '递归后';
  37. printf('<pre>%s</pre>', $res);

作业二 将四个数组回调函数自举例演示并发布

array_filter()

  • 过滤数组中的单元,返回计算结果为 true 的元素构成新的数组
  1. <?php
  2. function test1($var)
  3. {
  4. return ($var);
  5. }
  6. //过滤返回的空值
  7. $a1 = ["a", "b", 2, 3, 4, '0'];
  8. $res = print_r(array_filter($a1, "test1"), true);
  9. printf('<pre>%s</pre>', $res);

array_map()

  • 为数组中的每一个元素应用回调函数处理,返回新数组
  • 可以同时处理多个数组,功能强大

将函数作用到数组中的每个值上,每个值都乘以本身,并返回带有新值的数组

  1. //将函数作用到数组中的每个值上,每个值都乘以本身,并返回带有新值的数组:
  2. function myfunction($value)
  3. {
  4. return ($value * $value);
  5. }
  6. $a = array(1, 2, 3, 4, 5);
  7. $res = print_r(array_map("myfunction", $a), true);
  8. printf('<pre>%s</pre>', $res);

array_reduce()

  • 语法:array_reduce(array,myfunction,initial)
  • 语法:array_reduce(数组,函数,初始值)
  • 迭代处理数组元素
  1. // 求总和
  2. function myfunction2($v1, $v2)
  3. {
  4. return $v1 + $v2;
  5. }
  6. $a = array(10, 15, 20);
  7. print_r(array_reduce($a, "myfunction2", 5));

array_walk()

  • 类似 array_map(),凡是返回布尔值
  • 主要用于数组成员的格式化
  • 不受数组指针影响

    对数组中的每个元素应用用户自定义函数

  1. function myfunction3($value, $key)
  2. {
  3. echo "The key $key has the value $value<br>";
  4. }
  5. $a = ["a" => "red", "b" => "green", "c" => "blue"];
  6. array_walk($a, "myfunction3");

作业三 array_slice()与 array_splice()实例演示

array_slice() 函数在数组中根据条件取出一段值,并返回

  • 语法 array_slice(array,start,length,preserve)
  • preserve,false 重置键名,默认值,true 保留原有键名
  1. <?php
  2. $a = array("red", "green", "blue", "yellow", "brown");
  3. echo '原数组';
  4. printf('<pre>%s</pre>', print_r($a, true));
  5. $res = print_r(array_slice($a, 1, 2), true);
  6. echo '取出索引为1的,长度2的元素';
  7. printf('<pre>%s</pre>', $res);

array_splice() 函数从数组中移除选定的元素,并用新元素取代它。该函数也将返回包含被移除元素的数组

  1. <?php
  2. $a1 = array("a" => "red", "b" => "green", "c" => "blue", "d" => "yellow");
  3. $a2 = array("a" => "purple", "b" => "orange");
  4. echo '原数组';
  5. printf('<pre>%s</pre>', print_r($a1, true));
  6. array_splice($a1, 0, 2, $a2);
  7. $res = print_r($a1, true);
  8. echo '替换';
  9. printf('<pre>%s</pre>', $res);

array_splice() 函数与 array_slice() 函数类似,选择数组中的一系列元素,但不返回,而是删除它们并用其它值代替。

总结

在此,学习完了字符串函数和数组后,更加意识到了工作中需要经常对字符串和数组进行操作,PHP 数组是 PHP 必不可少的一部分,array 函数也有很重要的作用。很多功能可以通过自定义的函数实现,但是非常繁琐敲击一段函数,其实已经有系统函数可以实现这个目的,所以对函数的掌握程度不仅能够提高自己的知识积累,更能给自己未来开发项目省去大量的精力和提高效率。

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