编程里经常需要处理一批相关的数据。比如一个班级的学生名单、一份商品价格表、或者一个用户提交的表单数据。你可以给每一条数据单独声明一个变量,但数据一多,变量名就会满天飞,代码会变得杂乱,处理起来也麻烦。
PHP数组就是为这种场景设计的。数组是一个能在一个变量里存放多个值的容器,每个值通过一个唯一的键来标识和访问。 这个键值对系统让数据的存取变得统一且有序。数组里可以混合存放整数、字符串、对象等不同类型的值,PHP不会在类型上限制你。
日常开发中,数组几乎无处不在——存配置项、处理表单、遍历数据库查询结果、缓存API返回数据。把数组的基础概念和三种类型搞清楚,是PHP学习中值得花时间的一环。
为什么用数组而不是一堆独立变量
假设你要存一个学生的五门成绩。不用数组的话,代码可能长这样:
$score1 = 85;
$score2 = 90;
$score3 = 78;
$score4 = 92;
$score5 = 88;
如果要算平均分,你得手动把五个变量名都写一遍。如果学生有二十门课呢?维护成本和出错概率都会增加。
用数组的话,所有成绩收进一个变量,遍历、计算都方便得多。
数组带来的几个实际好处:
-
代码更简洁:一个变量容纳多个值,不用声明一堆分散的变量。
-
遍历方便:配合
foreach循环,能自然地逐个处理数据。 -
排序容易:PHP内置了多种排序函数,数组数据排序不用自己写算法。
-
容量自动扩展:往数组里添加新元素时,不需要提前声明大小,内存动态分配。
PHP的三种数组类型
PHP根据键的类型和数据的嵌套层级,把数组分为三类。每一类适用的场景不同。
| 数组类型 | 键的形式 | 主要用途 |
|---|---|---|
| 索引数组 | 从0开始的整数索引 | 存储有序列表,如用户名单、数字序列 |
| 关联数组 | 自定义的字符串键名 | 存储结构化信息,如配置项、用户档案 |
| 多维数组 | 数组里套数组 | 存储表格、矩阵、层级关系数据 |
一、索引数组:有序列表的存储方式
索引数组用从0开始的连续整数作为键。你不指定键时,PHP会自动按元素出现的先后顺序分配索引。它适合存那种“顺序有意义”的数据列表。
两种创建方式:
// 方式一:用array()函数一次声明
$languageList = array("PHP", "JavaScript", "Python", "Go");
// 方式二:逐个元素手动赋值
$languageList[0] = "PHP";
$languageList[1] = "JavaScript";
$languageList[2] = "Python";
$languageList[3] = "Go";
两种方式效果一样。方式一简洁,适合初始化时已知所有元素;方式二灵活,适合在程序运行过程中逐步填充数据。
访问和输出:
<?php
$toolList = array("VSCode", "Git", "MySQL", "Docker");
echo "我常用的开发工具:<br/>";
echo "编辑器:{$toolList[0]}<br/>";
echo "版本管理:{$toolList[1]}<br/>";
echo "数据库:{$toolList[2]}<br/>";
echo "容器:{$toolList[3]}<br/>";
?>
输出:
我常用的开发工具:
编辑器:VSCode
版本管理:Git
数据库:MySQL
容器:Docker
通过$数组名[索引]的方式来取出某个位置的值。索引从0开始,第一个元素是[0],第四个是[3]。
二、关联数组:用键名标注每条数据
索引数组的问题在于,时间长了你不一定记得[2]存的是什么。关联数组用自定义的字符串作为键,让每个值都有一个带含义的标签。它更像一张小表格——键是字段名,值是对应的数据。
两种创建方式:
// 方式一:用array()函数,键值对用=>连接
$userProfile = array(
"姓名" => "张明",
"年龄" => 28,
"城市" => "广州",
"邮箱" => "alan@ebingou.cn"
);
// 方式二:逐个键名手动赋值
$userProfile["姓名"] = "张明";
$userProfile["年龄"] = 28;
$userProfile["城市"] = "广州";
$userProfile["邮箱"] = "alan@ebingou.cn";
=>这个符号(叫双箭头操作符)左边是键,右边是值。键名用引号括起来。
访问和输出:
<?php
$employeeSalary = array(
"张伟" => 35000,
"李娜" => 45000,
"王磊" => 28000
);
echo "员工薪资明细:<br/>";
echo "张伟的薪资:{$employeeSalary['张伟']} 元<br/>";
echo "李娜的薪资:{$employeeSalary['李娜']} 元<br/>";
echo "王磊的薪资:{$employeeSalary['王磊']} 元<br/>";
?>
输出:
员工薪资明细:
张伟的薪资:35000 元
李娜的薪资:45000 元
王磊的薪资:28000 元
用$数组名['键名']访问某个特定条目。键名在这里是"张伟"、"李娜",它们就像表格的行标签,让数据的语义一目了然。
个人经验分享: 关联数组在PHP开发里使用频率非常高。处理数据库查询结果、配置文件、API返回的JSON数据,最终映射到PHP里基本都是关联数组。在代码号学习编程的过程中,建议把关联数组的存取语法练到条件反射的程度——用方括号加引号取键值,用=>定义键值对,这些操作会成为日常编码的基础动作。
三、多维数组:在数组中嵌套数组
有时候数据本身就有层级关系。比如一个班级里每个学生有多门课程的成绩,或者一个产品分类下面有多款产品。这时候需要一个数组里再套数组,形成多维数组。
常见的多维数组是二维数组——外层数组的每个元素本身也是一个数组。
<?php
// 每个学生是一个关联数组,整体放进一个外层数组
$studentScores = array(
"张明" => array(
"数学" => 85,
"英语" => 90,
"语文" => 78
),
"李华" => array(
"数学" => 92,
"英语" => 88,
"语文" => 95
),
"王芳" => array(
"数学" => 76,
"英语" => 82,
"语文" => 80
)
);
// 访问嵌套的数据:外层键指明学生,内层键指明科目
echo "张明的英语成绩:" . $studentScores["张明"]["英语"] . " 分<br/>";
echo "李华的数学成绩:" . $studentScores["李华"]["数学"] . " 分<br/>";
echo "王芳的语文成绩:" . $studentScores["王芳"]["语文"] . " 分<br/>";
?>
输出:
张明的英语成绩:90 分
李华的数学成绩:92 分
王芳的语文成绩:80 分
访问二维数组用两个方括号:第一个定位外层数组的键,第二个定位内层数组的键。如果还有更深层级,就继续加方括号,$arr['key1']['key2']['key3']这样。
本节课程知识要点
PHP数组是数据管理的基础工具,以下核心点值得记住:
-
数组用一个变量存多个值,通过键值对来组织和访问数据,避免变量泛滥。
-
索引数组用整数做键,从0开始自动编号,适合有序列表。
-
关联数组用字符串做键,给每条数据加上有含义的标签,适合结构化信息。
-
多维数组是数组嵌套数组,适合表达有层级关系的数据,比如表格、分类树。
-
访问数组元素用方括号,索引数组
$arr[0],关联数组$arr['key'],多维$arr['key1']['key2']。 -
数组大小动态增长,不需要预定义容量,添加新元素时自动扩展。
主观建议: 数组概念本身不难,但用法很广。初学时建议多在代码里刻意用数组替代零散变量,培养“相关数据应该组织在一起”的思维。同时注意键名的命名——关联数组的键名应该能让读代码的人一眼看懂这个值是干什么的。好的键名本身就是文档。后续学习foreach遍历、数组排序函数、数组增删操作时,这三种数组类型的基础认知会一直用得上。