Blogger Information
Blog 128
fans 9
comment 5
visits 240804
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
【php基础入门】PHP中常用的数组操作使用方法笔记整理(推荐)
 一纸荒凉* Armani
Original
1402 people have browsed it

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. ?>

今日份语录

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

Correcting teacher:灭绝师太灭绝师太

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post