批改状态:合格
老师批语:
数组是对大量数据进行有效组织和管理的手段之一,通过数组的强大功能,可以对大量性质相同的数据进行存储、排序、插入及删除等操作,从而可以有效地提高程序开发效率及改善程序的编写方式。
数组:是一组有序成员(键值对)的集合
// 索引数组:键是从0开始递增的正整数$arr = [a,b,c,d];// 除了中括号声明数组也可以用array$arr1 = array(11,22,33,44);echo "<pre>";print_r($arr);print_r($arr1);// 索引数组访问echo $arr[0],$arr[2];// 更新数组$arr[3] = 666;echo "<hr>";// -----------------------// 关联数组:键是“语义化”字符串 如:id uname email$user = ['id'=>1,"email"=>'2602138376@qq.com','uname'=>'zhang'];echo "<pre>";print_r($user);echo user['uname']; // zhang// 我们也可以直接赋值时创建$info['name'] = 'zhang';var_dump($info);
二维数组和多维数组
// 二维数组 数组中含有数组 [[],[],[]]$arr = [['username'=>'zhang','email'=>'1568@qq.com'],['username'=>'admin','email'=>'admin@qq.com'],['username'=>'shuai','email'=>'26021@qq.com']];echo "<pre>";print_r($arr);// 访问二维数组echo $arr[1]['uname']; // admin// 使用foreach遍历二维数组中每一项foreach($arr as $k=>$v){echo $v["uname"].$v["email"]."<br>";}// foreach 遍历对象$obj = new class{public $name = 'admin';public $email = 'admin@php.com';public $gender = true;};foreach($obj as $key=>$value){printf("[%s => %s] <br>",$key,$value);}
range() :https://www.php.net/manual/zh/function.range.php
// range(开始值,结束值,步长)// 快速生成1-10的数组$arr1 = range(1,10);print_r($arr1);/* Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 )*/// step 参数 每次增加的步长// 生成0 10 20 30 到10的数组$arr2 = range(0, 100, 10);print_r($arr2);/*Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 [6] => 60 [7] => 70 [8] => 80 [9] => 90 [10] => 100 )*/// 也可以生成字母a到i$arr3 = range('a', 'i');print_r($arr3);/* Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i )*/echo implode("",range("6 ","Q")); //space after the 9// 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
$arr = [22,33,44,55];// array_unshift() 在数组头部添加元素array_unshift($arr,11);// array_push() 在数组尾部添加元素array_push($arr,66);print_r($arr);/* 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
$arr = range(a,g);// 删除头部数组元素print_r($arr);/* Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g )*/// 删除头部元素a 返回删除的数组元素echo array_shift($arr); // aprint_r($arr);/* Array ( [0] => b [1] => c [2] => d [3] => e [4] => f [5] => g )*/// 删除尾部数组元素echo array_pop($arr); // gprint_r($arr);/* Array ( [0] => b [1] => c [2] => d [3] => e [4] => f ) */// array_splice 去掉数组中的某一部分并用其它值取代// 一个参数的时候 从当前位置删除到最后$input = array("red", "green", "blue", "yellow");array_splice($input, 2);var_dump($input);/* array(2) { [0]=> string(3) "red" [1]=> string(5) "green" } */// 两个参数,删除从开始位置到结束位置的元素$input = array("red", "green", "blue", "yellow");array_splice($input, 1, 2);var_dump($input);/* array(2) { [0]=> string(3) "red" [1]=> string(6) "yellow" } */// 三个参数,将开始位置和结束位置的元素替换为指定元素$input = array("red", "green", "blue", "yellow");// 注意:负数是从后往前数 -2 -1 0 相当于 第二个到倒数第二个 green bluearray_splice($input, 1, -1, array("black", "maroon"));var_dump($input);/* 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
$staff = ['id'=>1,'name'=>'zhang','gender'=> true,'age'=>18,'salary'=>666];$res = array_keys($staff);print_r(implode("---",$res));/* id---name---gender---age---salary */
array_key_exists():判断数组的键名或索引是否存在
https://www.php.net/manual/zh/function.array-key-exists.php
$staff = ['id'=>1,'name'=>'zhang','gender'=> true,'age'=>18,'salary'=>666];// 遍历方式查找索引名$res = false;foreach($staff as $key=>$value){if($key==='age'){$res = true;}}echo $res?"存在":"不存在";// 利用系统内置函数实现 array_key_exists()$res = array_key_exists("gender",$staff);echo $res?"存在":"不存在";
array_search — 在数组中搜索给定的值,返回该值对应的索引
https://www.php.net/manual/zh/function.array-search.php
// array_search — 在数组中搜索给定的值,如果成功则返回首个相应的键名$array = array(0 => 'blue', 1 => '52', 2 => 'green', 3 => 52);echo array_search('green', $array); // $key = 2;echo array_search(52, $array); // $key = 1;// 第三个参数 true,则将在数组中检查完全相同的元素 true === false ==echo array_search(52, $array,true); // $key = 3;
in_array() 检查数组中是否存在某个值,存在返回true 否则false
https://www.php.net/manual/zh/function.in-array.php
<?php$a = array(array('p', 'h'), array('p', 'r'), 'o');if (in_array(array('p', 'h'), $a)) {echo "'ph' was found\n";}if (in_array(array('h', 'r'), $a)) {echo "'hr' was found\n";}if (in_array('o', $a)) {echo "'o' was found\n";}/*'ph' was found'o' was found*/// 第三个可选参数,同样是 true 严格比较=== 默认为false ==?>
array_values 返回数组中所有的值,并给其重新建立数字索引
https://www.php.net/manual/zh/function.array-values.php
$array = array("size" => "XL", "color" => array("gold",'red',"green"));echo "<pre>";print_r(array_values($array));// 关联数组已被修改为 0 1 2 的索引数组且按照顺序/*Array([0] => XL[1] => Array([0] => gold[1] => red[2] => green))*/
array_walk 使用自定义函数对数组中的每个元素做回调处理
https://www.php.net/manual/zh/function.array-walk.php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");// 回调函数的三个形参分别为: 数组的值 ,数组的键,自定义传递的参数function test_alter(&$item,$key,$prefix){$item = "$prefix: $item";}function test_print($item, $key){echo "{$key}. {$item}<br />\n";}array_walk($fruits, 'test_print');echo "<hr>";$fruits = array_values($fruits);array_walk($fruits, 'test_print');echo "<hr>";// 参数分别为:数组、回调函数、回调函数的参数……array_walk($fruits, 'test_alter', 'fruit');// 也可以直接传递一个匿名函数array_walk($fruits, function ($item, $key){echo "{$key}. {$item}<br />\n";});/*d. lemona. orangeb. bananac. apple---------------------------------0. lemon1. orange2. banana3. apple--------------------------------0. fruit: lemon1. fruit: orange2. fruit: banana3. fruit: apple*/// array_walk的回调函数也可以使用闭包use关键字获取全局变量下面我们来做一下,给我们最喜欢吃的水果加上My favorite$favorite = 'fruit: orange';array_walk($fruits,function(&$item,$key,$suffix)use($favorite){if($item == $favorite){$item .= $suffix;}},' My favorite');echo "<hr>";array_walk($fruits, 'test_print');/*0. fruit: lemon1. fruit: orange My favorite2. fruit: banana3. fruit: apple*/
array_map — 为数组的每个元素应用回调函数
https://www.php.net/manual/zh/function.array-map.php
// array_map() 该函数和array_walk功能相似,也是利用回调函数对数组进行处理,只是参数顺序不同// 返回处理过后的数组,第一个参数回调函数,第二个为数组$arr = array_map(function($v){return $v*2;},[1,2,3,4,5]);echo implode(",",$arr);// 2,4,6,8,10
array_filter() 使用回调函数过滤数组中的元素
https://www.php.net/manual/zh/function.array-filter.php
$arr = array_filter([1,2,7,8,10,98],function($v){return $v>=7;};echo "<pre>";print_r($arr);/*Array([2] => 7[3] => 8[4] => 10[5] => 98)*/// 但是我们看到,过滤后的数组的索引不是从零开始的了,我们需要使用arrya_values处理一下$res = array_values($arr);echo "<pre>";print_r($res);/*Array([0] => 7[1] => 8[2] => 10[3] => 98)*/
| 函数 | 说明 |
|---|---|
| sort() | 对数组元素进行升序排序(从小到大)。 |
| rsort() | 对数组元素进行降序排序(从大到小)。 |
| asort() | 对数组元素进行升序排序(从小到大),并保持索引关系。 |
| arsort() | 对数组元素进行降序排序(从大到小),并保持索引关系。 |
| ksort() | 按照数组的键值对数组进行升序排序(从小到大),并保持索引关系。 |
| krsort() | 按照数组的键值对数组进行降序排序(从大到小),并保持索引关系。 |
// count()和sizeof():获取数组长度 implode():数组转字符串$num = [8,4,6,7,2,3,18,32,1,23];echo "count计算数组长度为".count($num)."<br>"; // 10echo "sizeof计算数组长度为".sizeof($num)."<br>"; // 10echo implode(',',$num)."<br>"; // 8,4,6,7,2,3,18,32,1,23// 使用sort排序后的数组(sort升序rsort降序)sort($num);echo implode(',',$num)."<br>"; // 1,2,3,4,6,7,8,18,23,32echo "<pre>";print_r($num);/*Array([0] => 1[1] => 2[2] => 3[3] => 4[4] => 6[5] => 7[6] => 8[7] => 18[8] => 23[9] => 32)*/// asort()排序,键值保持原有关系(asort升序arsort降序)$num = [8,4,6,7,2,3,18,32,1,23];asort($num);echo implode(',',$num)."<br>"; // 1,2,3,4,6,7,8,18,23,32echo "<pre>";print_r($num);/*Array([8] => 1[4] => 2[5] => 3[1] => 4[2] => 6[3] => 7[0] => 8[6] => 18[9] => 23[7] => 32)*/
current():返回数组的当前元素
key():返回数组中当前元素的键名
next()与prev():向上/下移动数组指针
reset()和end():将数组内部指针指向数组第一个/最后一个元素
list():把数组中的值赋给一组变量(数组解构)
$arr = ['red','yellow','blue','pink','green','gay'];echo current($arr); // redecho key($arr); // 0next($arr);echo current($arr); // yellownext($arr);echo current($arr); // blueend($arr);echo current($arr); // gayecho current($arr); // gayreset($arr);echo current($arr); // redlist($a,$b,,$d)=$arr;echo $a,$b,$d; // red yellow pink
数组截取函数 array_slice
$num = [11,22,33,44,55,66];echo "<br>截取的元素:";print_r(implode(',',array_slice($num,2,3));// 截取的元素:33,44,55
在 PHP 开发过程中,有相当大的部分是与数组打交道,例如入库的内容、统计相关内容等操作都离不开数组,很多信息都是用数组作为载体的。所以数组的操作在 PHP 编程中占有很大的比重,只有熟练地操作数组才能更好的编写 PHP 程序。
除了前面我们介绍到的一些函数外,PHP 中还提供了很多特定功能的数组函数,本节我们就来归纳一下 PHP 中常用的数组处理函数。
访问PHP手册 https://www.php.net/manual/zh/ref.array.php 来查看更详细的内容
数组的键/值操作:
数组的拆分、合并:
数组的填充与清除:
数组的计算:
其它数组函数:
<?php$data = [['name'=>'zhangdan','id'=>2],['name'=>'lisi','id'=>1]];echo "<pre>";print_r($data);array_walk($data,function(&$arr,$k,$name){$arr[$name]=$arr['name'];unset($arr['name']);},'user');echo "<pre>";print_r($data);?>
<?php$arr = range(1,100);print_r($arr);$res = array_filter($arr,function($v){return $v%2==0;});print_r(array_values($res));?>
大多数的痛苦,都是因为自己跟自己过不去。心是收藏快乐的,别让它困于计较中,最后都盛了痛;别总执迷于困境,挤走原本难得的快乐。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号