博客列表 >【php基础入门】PHP中常用的数组操作使用方法笔记整理(推荐)

【php基础入门】PHP中常用的数组操作使用方法笔记整理(推荐)

 一纸荒凉* Armani
 一纸荒凉* Armani原创
2021年05月02日 09:13:551404浏览

PHP数组

数组是对大量数据进行有效组织和管理的手段之一,通过数组的强大功能,可以对大量性质相同的数据进行存储、排序、插入及删除等操作,从而可以有效地提高程序开发效率及改善程序的编写方式。

数组:是一组有序成员(键值对)的集合

  1. 索引数组
  2. 关联数组
  1. // 索引数组:键是从0开始递增的正整数
  2. $arr = [a,b,c,d];
  3. // 除了中括号声明数组也可以用array
  4. $arr1 = array(11,22,33,44);
  5. echo "<pre>";
  6. print_r($arr);
  7. print_r($arr1);
  8. // 索引数组访问
  9. echo $arr[0],$arr[2];
  10. // 更新数组
  11. $arr[3] = 666;
  12. echo "<hr>";
  13. // -----------------------
  14. // 关联数组:键是“语义化”字符串 如:id uname email
  15. $user = ['id'=>1,"email"=>'2602138376@qq.com','uname'=>'zhang'];
  16. echo "<pre>";
  17. print_r($user);
  18. echo user['uname']; // zhang
  19. // 我们也可以直接赋值时创建
  20. $info['name'] = 'zhang';
  21. var_dump($info);

二维数组和多维数组

  1. // 二维数组 数组中含有数组 [[],[],[]]
  2. $arr = [
  3. ['username'=>'zhang','email'=>'1568@qq.com'],
  4. ['username'=>'admin','email'=>'admin@qq.com'],
  5. ['username'=>'shuai','email'=>'26021@qq.com']
  6. ];
  7. echo "<pre>";
  8. print_r($arr);
  9. // 访问二维数组
  10. echo $arr[1]['uname']; // admin
  11. // 使用foreach遍历二维数组中每一项
  12. foreach($arr as $k=>$v){
  13. echo $v["uname"].$v["email"]."<br>";
  14. }
  15. // foreach 遍历对象
  16. $obj = new class{
  17. public $name = 'admin';
  18. public $email = 'admin@php.com';
  19. public $gender = true;
  20. };
  21. foreach($obj as $key=>$value){
  22. printf("[%s => %s] <br>",$key,$value);
  23. }

快速生成数组函数

range() :https://www.php.net/manual/zh/function.range.php

  1. // range(开始值,结束值,步长)
  2. // 快速生成1-10的数组
  3. $arr1 = range(1,10);
  4. print_r($arr1);
  5. /* Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 )*/
  6. // step 参数 每次增加的步长
  7. // 生成0 10 20 30 到10的数组
  8. $arr2 = range(0, 100, 10);
  9. print_r($arr2);
  10. /*Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 [6] => 60 [7] => 70 [8] => 80 [9] => 90 [10] => 100 )*/
  11. // 也可以生成字母a到i
  12. $arr3 = range('a', 'i');
  13. print_r($arr3);
  14. /* Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i )*/
  15. echo implode("",range("6 ","Q")); //space after the 9
  16. // prints 6789:;<=>?@ABCDEFGHIJKLMNOPQ

添加数组元素函数

array_unshift:https://www.php.net/manual/zh/function.array-unshift.php

array_push:https://www.php.net/manual/zh/function.array-push.php

  1. $arr = [22,33,44,55];
  2. // array_unshift() 在数组头部添加元素
  3. array_unshift($arr,11);
  4. // array_push() 在数组尾部添加元素
  5. array_push($arr,66);
  6. print_r($arr);
  7. /* Array ( [0] => 11 [1] => 22 [2] => 33 [3] => 44 [4] => 55 [5] => 66 )*/

删除数组元素函数

array_shift:https://www.php.net/manual/zh/function.array-shift.php

array_pop:https://www.php.net/manual/zh/function.array-pop.php

array_slice:https://www.php.net/manual/zh/function.array-splice.php

  1. $arr = range(a,g);
  2. // 删除头部数组元素
  3. print_r($arr);
  4. /* Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g )*/
  5. // 删除头部元素a 返回删除的数组元素
  6. echo array_shift($arr); // a
  7. print_r($arr);
  8. /* Array ( [0] => b [1] => c [2] => d [3] => e [4] => f [5] => g )*/
  9. // 删除尾部数组元素
  10. echo array_pop($arr); // g
  11. print_r($arr);
  12. /* Array ( [0] => b [1] => c [2] => d [3] => e [4] => f ) */
  13. // array_splice 去掉数组中的某一部分并用其它值取代
  14. // 一个参数的时候 从当前位置删除到最后
  15. $input = array("red", "green", "blue", "yellow");
  16. array_splice($input, 2);
  17. var_dump($input);
  18. /* array(2) { [0]=> string(3) "red" [1]=> string(5) "green" } */
  19. // 两个参数,删除从开始位置到结束位置的元素
  20. $input = array("red", "green", "blue", "yellow");
  21. array_splice($input, 1, 2);
  22. var_dump($input);
  23. /* array(2) { [0]=> string(3) "red" [1]=> string(6) "yellow" } */
  24. // 三个参数,将开始位置和结束位置的元素替换为指定元素
  25. $input = array("red", "green", "blue", "yellow");
  26. // 注意:负数是从后往前数 -2 -1 0 相当于 第二个到倒数第二个 green blue
  27. array_splice($input, 1, -1, array("black", "maroon"));
  28. var_dump($input);
  29. /* array(4) { [0]=> string(3) "red" [1]=> string(5) "black" [2]=> string(6) "maroon" [3]=> string(6) "yellow" }*/

数组键值操作函数

array_keys 获取数组的键组成的数组

https://www.php.net/manual/zh/function.array-keys.php

  1. $staff = ['id'=>1,'name'=>'zhang','gender'=> true,'age'=>18,'salary'=>666];
  2. $res = array_keys($staff);
  3. print_r(implode("---",$res));
  4. /* id---name---gender---age---salary */

array_key_exists():判断数组的键名或索引是否存在

https://www.php.net/manual/zh/function.array-key-exists.php

  1. $staff = ['id'=>1,'name'=>'zhang','gender'=> true,'age'=>18,'salary'=>666];
  2. // 遍历方式查找索引名
  3. $res = false;
  4. foreach($staff as $key=>$value){
  5. if($key==='age'){
  6. $res = true;
  7. }
  8. }
  9. echo $res?"存在":"不存在";
  10. // 利用系统内置函数实现 array_key_exists()
  11. $res = array_key_exists("gender",$staff);
  12. echo $res?"存在":"不存在";

array_search — 在数组中搜索给定的值,返回该值对应的索引

https://www.php.net/manual/zh/function.array-search.php

  1. // array_search — 在数组中搜索给定的值,如果成功则返回首个相应的键名
  2. $array = array(0 => 'blue', 1 => '52', 2 => 'green', 3 => 52);
  3. echo array_search('green', $array); // $key = 2;
  4. echo array_search(52, $array); // $key = 1;
  5. // 第三个参数 true,则将在数组中检查完全相同的元素 true === false ==
  6. echo array_search(52, $array,true); // $key = 3;

in_array() 检查数组中是否存在某个值,存在返回true 否则false

https://www.php.net/manual/zh/function.in-array.php

  1. <?php
  2. $a = array(array('p', 'h'), array('p', 'r'), 'o');
  3. if (in_array(array('p', 'h'), $a)) {
  4. echo "'ph' was found\n";
  5. }
  6. if (in_array(array('h', 'r'), $a)) {
  7. echo "'hr' was found\n";
  8. }
  9. if (in_array('o', $a)) {
  10. echo "'o' was found\n";
  11. }
  12. /*
  13. 'ph' was found
  14. 'o' was found
  15. */
  16. // 第三个可选参数,同样是 true 严格比较=== 默认为false ==
  17. ?>

array_values 返回数组中所有的值,并给其重新建立数字索引

https://www.php.net/manual/zh/function.array-values.php

  1. $array = array("size" => "XL", "color" => array("gold",'red',"green"));
  2. echo "<pre>";
  3. print_r(array_values($array));
  4. // 关联数组已被修改为 0 1 2 的索引数组且按照顺序
  5. /*
  6. Array
  7. (
  8. [0] => XL
  9. [1] => Array
  10. (
  11. [0] => gold
  12. [1] => red
  13. [2] => green
  14. )
  15. )
  16. */

常用数组回调函数

array_walk 使用自定义函数对数组中的每个元素做回调处理

https://www.php.net/manual/zh/function.array-walk.php

  1. $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
  2. // 回调函数的三个形参分别为: 数组的值 ,数组的键,自定义传递的参数
  3. function test_alter(&$item,$key,$prefix){
  4. $item = "$prefix: $item";
  5. }
  6. function test_print($item, $key)
  7. {
  8. echo "{$key}. {$item}<br />\n";
  9. }
  10. array_walk($fruits, 'test_print');
  11. echo "<hr>";
  12. $fruits = array_values($fruits);
  13. array_walk($fruits, 'test_print');
  14. echo "<hr>";
  15. // 参数分别为:数组、回调函数、回调函数的参数……
  16. array_walk($fruits, 'test_alter', 'fruit');
  17. // 也可以直接传递一个匿名函数
  18. array_walk($fruits, function ($item, $key)
  19. {
  20. echo "{$key}. {$item}<br />\n";
  21. });
  22. /*
  23. d. lemon
  24. a. orange
  25. b. banana
  26. c. apple
  27. ---------------------------------
  28. 0. lemon
  29. 1. orange
  30. 2. banana
  31. 3. apple
  32. --------------------------------
  33. 0. fruit: lemon
  34. 1. fruit: orange
  35. 2. fruit: banana
  36. 3. fruit: apple
  37. */
  38. // array_walk的回调函数也可以使用闭包use关键字获取全局变量
  39. 下面我们来做一下,给我们最喜欢吃的水果加上My favorite
  40. $favorite = 'fruit: orange';
  41. array_walk($fruits,function(&$item,$key,$suffix)use($favorite){
  42. if($item == $favorite){
  43. $item .= $suffix;
  44. }
  45. },' My favorite');
  46. echo "<hr>";
  47. array_walk($fruits, 'test_print');
  48. /*
  49. 0. fruit: lemon
  50. 1. fruit: orange My favorite
  51. 2. fruit: banana
  52. 3. fruit: apple
  53. */

array_map — 为数组的每个元素应用回调函数

https://www.php.net/manual/zh/function.array-map.php

  1. // array_map() 该函数和array_walk功能相似,也是利用回调函数对数组进行处理,只是参数顺序不同
  2. // 返回处理过后的数组,第一个参数回调函数,第二个为数组
  3. $arr = array_map(function($v){
  4. return $v*2;
  5. },[1,2,3,4,5]);
  6. echo implode(",",$arr);
  7. // 2,4,6,8,10

array_filter() 使用回调函数过滤数组中的元素

https://www.php.net/manual/zh/function.array-filter.php

  1. $arr = array_filter([1,2,7,8,10,98],function($v){
  2. return $v>=7;
  3. };
  4. echo "<pre>";
  5. print_r($arr);
  6. /*
  7. Array
  8. (
  9. [2] => 7
  10. [3] => 8
  11. [4] => 10
  12. [5] => 98
  13. )
  14. */
  15. // 但是我们看到,过滤后的数组的索引不是从零开始的了,我们需要使用arrya_values处理一下
  16. $res = array_values($arr);
  17. echo "<pre>";
  18. print_r($res);
  19. /*
  20. Array
  21. (
  22. [0] => 7
  23. [1] => 8
  24. [2] => 10
  25. [3] => 98
  26. )
  27. */

数组键值排序函数

函数 说明
sort() 对数组元素进行升序排序(从小到大)。
rsort() 对数组元素进行降序排序(从大到小)。
asort() 对数组元素进行升序排序(从小到大),并保持索引关系。
arsort() 对数组元素进行降序排序(从大到小),并保持索引关系。
ksort() 按照数组的键值对数组进行升序排序(从小到大),并保持索引关系。
krsort() 按照数组的键值对数组进行降序排序(从大到小),并保持索引关系。
  1. // count()和sizeof():获取数组长度 implode():数组转字符串
  2. $num = [8,4,6,7,2,3,18,32,1,23];
  3. echo "count计算数组长度为".count($num)."<br>"; // 10
  4. echo "sizeof计算数组长度为".sizeof($num)."<br>"; // 10
  5. echo implode(',',$num)."<br>"; // 8,4,6,7,2,3,18,32,1,23
  6. // 使用sort排序后的数组(sort升序rsort降序)
  7. sort($num);
  8. echo implode(',',$num)."<br>"; // 1,2,3,4,6,7,8,18,23,32
  9. echo "<pre>";
  10. print_r($num);
  11. /*
  12. Array
  13. (
  14. [0] => 1
  15. [1] => 2
  16. [2] => 3
  17. [3] => 4
  18. [4] => 6
  19. [5] => 7
  20. [6] => 8
  21. [7] => 18
  22. [8] => 23
  23. [9] => 32
  24. )
  25. */
  26. // asort()排序,键值保持原有关系(asort升序arsort降序)
  27. $num = [8,4,6,7,2,3,18,32,1,23];
  28. asort($num);
  29. echo implode(',',$num)."<br>"; // 1,2,3,4,6,7,8,18,23,32
  30. echo "<pre>";
  31. print_r($num);
  32. /*
  33. Array
  34. (
  35. [8] => 1
  36. [4] => 2
  37. [5] => 3
  38. [1] => 4
  39. [2] => 6
  40. [3] => 7
  41. [0] => 8
  42. [6] => 18
  43. [9] => 23
  44. [7] => 32
  45. )
  46. */

数组内部指针操作

current():返回数组的当前元素

key():返回数组中当前元素的键名

next()与prev():向上/下移动数组指针

reset()和end():将数组内部指针指向数组第一个/最后一个元素

list():把数组中的值赋给一组变量(数组解构)

  1. $arr = ['red','yellow','blue','pink','green','gay'];
  2. echo current($arr); // red
  3. echo key($arr); // 0
  4. next($arr);
  5. echo current($arr); // yellow
  6. next($arr);
  7. echo current($arr); // blue
  8. end($arr);
  9. echo current($arr); // gay
  10. echo current($arr); // gay
  11. reset($arr);
  12. echo current($arr); // red
  13. list($a,$b,,$d)=$arr;
  14. echo $a,$b,$d; // red yellow pink

数组截取函数 array_slice

  1. $num = [11,22,33,44,55,66];
  2. echo "<br>截取的元素:";
  3. print_r(implode(',',array_slice($num,2,3));
  4. // 截取的元素:33,44,55

更多相关数组函数

在 PHP 开发过程中,有相当大的部分是与数组打交道,例如入库的内容、统计相关内容等操作都离不开数组,很多信息都是用数组作为载体的。所以数组的操作在 PHP 编程中占有很大的比重,只有熟练地操作数组才能更好的编写 PHP 程序。

除了前面我们介绍到的一些函数外,PHP 中还提供了很多特定功能的数组函数,本节我们就来归纳一下 PHP 中常用的数组处理函数。

访问PHP手册 https://www.php.net/manual/zh/ref.array.php 来查看更详细的内容

数组的键/值操作:

数组的拆分、合并:

数组的填充与清除:

数组的计算:

其它数组函数:

今日份作业

  1. 如何将以下二维数组里的键值name换成user ,其他保持不变? $data = [[‘name’=>’zhangdan’,’id’=>2],[‘name’=>’lisi’,’id’=>1]];
  1. <?php
  2. $data = [['name'=>'zhangdan','id'=>2],['name'=>'lisi','id'=>1]];
  3. echo "<pre>";
  4. print_r($data);
  5. array_walk($data,function(&$arr,$k,$name){
  6. $arr[$name]=$arr['name'];
  7. unset($arr['name']);
  8. },'user');
  9. echo "<pre>";
  10. print_r($data);
  11. ?>
  1. 生成一个由1-100组成的数组,要求返回该数组中的偶数组成的新数组,并且新数组的索引从0开始?
  1. <?php
  2. $arr = range(1,100);
  3. print_r($arr);
  4. $res = array_filter($arr,function($v){
  5. return $v%2==0;
  6. });
  7. print_r(array_values($res));
  8. ?>

今日份语录

大多数的痛苦,都是因为自己跟自己过不去。心是收藏快乐的,别让它困于计较中,最后都盛了痛;别总执迷于困境,挤走原本难得的快乐。

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