博客列表 >数组常用操作函数解析

数组常用操作函数解析

lilove的博客
lilove的博客原创
2020年07月16日 01:11:26981浏览

操作用户提交数据示例

用户提交的url:

http://127.0.0.1/20200713/1.php?username=%E5%B0%8F%E5%88%9A&email=admin@php.cn

代码示例:

  • 案例1:array_key_exist()判断用户提交数据是否存在必要字段
  1. echo array_key_exists('username', $_GET) ? '提交成功' : '用户名未提交';
  • 案例2:array_key_first()获取用户提交的数据中第一个元素的键
  1. echo array_key_first($_GET);
  • 案例3:array_key_last()获取用户提交的数据中最后一个元素的键
  1. echo array_key_last($_GET);
  • 案例4:array_keys()获取用户提交数据数组所有键
  1. print_r(array_keys($_GET));
  • 案例5:array_values()将用户提交的数据的值组成索引数组
  1. print_r(array_values($_GET));
  • 案例6:in_array()检查用户提交数据中是否存在值’小刚’
  1. echo in_array('小刚', $_GET) ? '用户名存在' : '用户名未提交';
  • 案例7:array_search()查找用户提交数据的值中是否有admin@php.cn
  1. echo array_search('admin@php.cn', $_GET) ? '邮箱正确' : '邮箱未提交';
  • 案例8:array_unique()移除数组中重复的值,只保留第一个
  1. $array = ['name' => '小刚', 'name' => '小明', 'email' => 'admin@php.cn'];
  2. print_r(array_unique($array));
  • 案例9:array_sum()计算数组中数字之和,元素的值数字开头的数字也会计算,不能被计算的字符串记为0
  1. $arr = [5, 10, 20, '200', 'h5'];
  2. echo array_sum($arr);
  • 案例10:array_product()计算数组中所有值的乘积,不能被计算的字符串记为0
  1. echo array_product($arr);
  • 案例11:array_intersect()计算数组的交集
  1. print_r(array_intersect($array, $_GET));

栈、队列

  • 栈: 是添加与删除受限的一种数据结构,数据的增删仅允许在一端进行, LIFO,最后进最先出

用户提交的url:

http://127.0.0.1/20200713/2.php?username=%E5%B0%8F%E5%88%9A&email=admin@php.cn

  • 案例1:array_push()将数组当成一个栈,并将传入的变量压入数组的末尾。
  1. $token = sha1(md5('小刚'));
  2. array_push($_GET, $token);
  3. print_r($_GET);
  • 案例2:array_pop()弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。
    使用此函数后会重置(reset())array 指针。
  1. echo array_pop($_GET);
  • 案例3:array_unshift() 将传入的数组单元插入到数组的开头。
  1. $key = sha1(md5('小刚'));
  2. array_unshift($_GET, $key);
  3. print_r($_GET);
  • 案例4:array_shift()将数组的第一个单元移出并作为结果返回
  1. echo array_shift($_GET);
  2. print_r($_GET);

数组排序

  • 先定义一个数组
  1. $array = [5, 10, 15, 20, 11, 2, '66l', 'Po'];
  • 案例1:sort()对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。
  1. var_dump(sort($array));
  2. print_r($array);
  • 案例2:asort()对数组进行排序并保持索引关系
  1. var_dump(asort($array));
  2. print_r($array);
  • 案例3:arsort()对数组进行逆向排序并保持索引关系
  1. var_dump(arsort($array));
  2. print_r($array);
  • 案例4:ksort()对数组按照键名排序
  1. var_dump(ksort($array));
  2. print_r($array);
  • 案例5:krsort()对数组按照键名逆向排序
  1. var_dump(krsort($array));
  2. print_r($array);
  • 案例6:usort()使用用户自定义的比较函数对数组中的值进行排序
  1. function arr()
  2. {
  3. $arr = [5, 10, 15, 20, 11, 2, '66l', 'Po'];
  4. $arr1 = [5, 10, 15, 20, 11, 2, '66l', 'Po'];
  5. return $arr == $arr1 ? 0 : -1;
  6. }
  7. var_dump(usort($array, 'arr'));
  8. print_r($array);
  9. echo 'usort';
  • 案例7:uasort()使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
  1. var_dump(uasort($array, 'arr'));
  2. print_r($array);
  3. echo 'uasort';
  • 案例8:uksort()使用用户自定义的比较函数对数组中的键名进行排序
  1. var_dump(uksort($array, 'arr'));
  2. print_r($array);
  3. echo 'uksort';
  • 案例9:natsort()用“自然排序”算法对数组排序
  1. var_dump(natsort($array));
  2. print_r($array);
  • 案例10:natcasesort()用“自然排序”算法对数组进行不区分大小写字母的排序
  1. var_dump(natcasesort($array));
  2. print_r($array);

数组增删改

  • 用户提交的url:

http://127.0.0.1/20200713/4.php?name=%E5%B0%8F%E5%88%9A&age=18&sex=%E7%94%B7&email=admin@php.cn

  • 案例1:array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列。
  1. print_r(array_slice($_GET, 2, 6));
  2. print_r(array_slice($_GET, -1, 3));
  • 案例2:array_splice()操作数组案例:
  1. $array = ['小刚', 18, '男', '180cm'];
  2. // 增:利用删除长度为0的方法新增元素
  3. // 由于被删除的元素长度为0,所以返回空数组
  4. print_r(array_splice($array, 1, 0, ['name' => '小明', '年龄' => 28]));
  5. print_r($array);
  6. // 删除数组中的一部分元素:删除索引1开始的2个元素
  7. // 返回被删除的元素
  8. // print_r(array_splice($array, 1, 2));
  9. // 原数组已改变
  10. // print_r($array);
  11. // 改:去掉数组中的某一部分并用其它值取代
  12. // 返回被提取出的元素,这里['小刚', 18]被替换
  13. // print_r(array_splice($array, 1, 2, ['小明', 20]));
  14. // echo '<br>';
  15. // 原数组已被改变
  16. // print_r($array);

数组合并

  • 案例1:array_combine()数组合并,将第一个数组的值作为键与第二个数组的值合并成一个数组。
  1. $array1 = ['name', '班级', '容貌'];
  2. $array2 = ['小明', '13期', '神仙颜值'];
  3. $array3 = array_combine($array1, $array2);
  4. print_r($array3);
  • 案例2:array_merge()将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。

返回作为结果的数组。

  1. $array4 = array_merge($array1, $array2);
  2. print_r($array4);

回调

  • 案例1:array_filter(),将元素转换后为false的值全部过滤掉

回调函数结果为数组

  1. $array = [150, 'php', true, [4, 5, 6], (new class
  2. {
  3. }), [], null, false, '', 0, '0'];
  4. $get = array_filter($array);
  5. $get = array_filter($array, function ($item) {
  6. // 返回传入的元素
  7. // return $item;
  8. // is_scalar()检测数组中的元素是否是标量
  9. // 标量变量是指那些包含了 integer、float、string 或 boolean的变量,而 array、object 和 resource 则不是标量。
  10. return is_scalar($item);
  11. // 检测数组中的元素是否是数组
  12. // return is_array($item);
  13. });
  14. print_r($get);
  • 案例2:array_map()为数组的每个元素应用回调函数

返回新数组

  1. $get = array_map(function ($item) {
  2. // 判断数组的每个元素类型是否数组
  3. return gettype($item) == 'array' ? '是数组' : '不是数组';
  4. }, $array);
  5. print_r($get);

数组与字符串的转换

  • 用户提交的url:

url:http://127.0.0.1/20200713/7.php?name=%E5%B0%8F%E5%88%9A&age=18&sex=%E7%94%B7&email=admin@php.cn

  • 案例1:implode()将一个一维数组的值转化为字符串
  1. echo implode($_GET);
  • 案例2:extract()从数组中将变量导入到当前的符号表

对每个键/值对都会在当前的符号表中建立变量

  1. echo extract($_GET);
  2. echo $name, $age, $sex, $email;
  • 案例3:compact()建立一个数组,包括变量名和它们的值
  1. $host = '127.0.0.1';
  2. $user = 'admin';
  3. $dbname = 'parse';
  4. print_r(compact('host', 'user', 'dbname'));

总结

  • 数组操作函数的返回值一定要记住;

  • 数组元素操作可以组合数据库连接字符串及查询语句;

  • 用户提交的数据过滤;

  • 掌握数组与字符串的转换技巧;

  • 掌握栈与队列的含义及工作流程。

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