HoRain云--PHP 数组

🎬 HoRain 云小助手:个人主页
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
目录

PHP 中的数组(Array)是其最强大、最核心的数据结构,本质上是一个有序映射(Ordered Map)。它兼具了传统编程语言中 索引数组、关联数组、链表、字典(Hash Table)和对象 的功能。
以下是 PHP 数组的全面解析:
1. 核心特性:有序映射 (Ordered Map)
PHP 数组不是简单的线性存储结构,而是 Hash Table(哈希表)+ 双向链表。
-
哈希表:保证通过 Key 查找数据的速度是 O(1)。
-
双向链表:保证元素之间的顺序(插入顺序)得以保留。
这意味着 PHP 数组既能像字典一样快速查找,又能像列表一样保持顺序。
2. 数组的类型(表现形式)
虽然内部只有一种结构,但按用法可分为两种:
2.1 索引数组 (Indexed Array)
键名是整数,通常用于存储列表。
$colors = ["Red", "Green", "Blue"];
// 等价于:
$colors = array("Red", "Green", "Blue");
echo $colors[1]; // 输出: Green
2.2 关联数组 (Associative Array)
键名是字符串,用于存储键值对(类似 JSON 或 Python 的 Dict)。
$user = [
"name" => "Alice",
"age" => 25,
"city" => "Beijing"
];
echo $user["name"]; // 输出: Alice
2.3 混合数组
PHP 允许同时存在整数键和字符串键。
$mixed = [
"foo" => "bar",
42 => "answer",
"test"
];
// "test" 会自动分配下一个整数索引(这里是 43)
3. 基本操作速查表
|
操作 |
代码示例 |
说明 |
|---|---|---|
|
创建 |
|
推荐(短数组语法) |
|
读取 |
|
访问不存在的 key 会产生 Warning |
|
赋值 |
|
若 key 不存在则新增 |
|
删除 |
|
删除元素,数组不会重建索引 |
|
检查存在 |
|
检查是否存在且不为 null |
|
判断为空 |
|
检查是否为空或不存在 |
|
遍历 |
|
最常用的遍历方式 |
4. 遍历数组 (Loop)
4.1 foreach(首选)
// 只取值
foreach ($array as $value) {
echo $value;
}
// 取键和值
foreach ($array as $key => $value) {
echo "$key: $value";
}
4.2 for循环 (仅限连续整数索引)
for ($i = 0; $i < count($array); $i++) {
echo $array[$i];
}
5. 常用数组函数(必知)
PHP 拥有超过 80+ 个数组处理函数,以下是高频使用的:
增删改查
|
函数 |
作用 |
|---|---|
|
|
统计元素个数 |
|
|
入栈(尾部添加) |
|
|
出栈(尾部删除) |
|
|
头部删除 |
|
|
头部添加 |
|
|
合并数组 |
排序
|
函数 |
作用 |
|---|---|
|
|
升序(重新索引) |
|
|
降序 |
|
|
按值升序(保持键值关联) |
|
|
按键升序 |
|
|
反转数组 |
转换与过滤
|
函数 |
作用 |
|---|---|
|
|
获取所有键 |
|
|
获取所有值(重建数字索引) |
|
|
回调函数处理每个元素 |
|
|
过滤元素 |
|
|
检查值是否存在 |
|
|
检查键是否存在 |
6. 引用 (&) 与 复制
这是 PHP 数组最容易踩坑的地方。
默认是“写时复制” (Copy On Write)
$a = [1, 2, 3];
$b = $a; // 此时 $b 和 $a 指向同一块内存(不消耗额外内存)
$b[] = 4; // 此时发生分离,$b 复制了一份新数组
强制引用
$a = [1, 2, 3];
$b = &$a; // $b 是 $a 的别名
$b[] = 4;
echo $a[3]; // 输出 4 ($a 也被改变了)
⚠️ 警告:引用容易导致内存泄漏和逻辑混乱,非必要不建议使用。
7. 多维数组
其实就是数组里面包含数组。
$users = [
["id" => 1, "name" => "Tom"],
["id" => 2, "name" => "Jerry"]
];
echo $users[1]['name']; // Jerry
8. 性能与陷阱
-
不要用
array_search频繁查找:如果是大数据量,建议转为isset($map[$key])。 -
foreach中的引用陷阱:foreach ($arr as &$value) {} unset($value); // 必须 unset,否则 $value 残留最后一个元素的引用,下次赋值会出问题。 -
JSON 互转:
-
json_encode($arr):转为 JSON 字符串。 -
json_decode($json, true):一定要加true,否则得到的是stdClass对象而不是数组。
-
9. 现代 PHP (7.4+) 技巧
// 展开运算符 (Spread Operator)
$arr1 = [1, 2];
$arr2 = [3, 4];
$merged = [...$arr1, ...$arr2]; // [1,2,3,4]
// 箭头函数配合数组
$squares = array_map(fn($n) => $n * $n, [1, 2, 3]);
总结
PHP 数组是瑞士军刀。如果你习惯了 Java 的 List和 Map分开,刚开始会觉得 PHP 数组很乱,但一旦掌握其“有序映射”的本质,你会发现它极其高效和灵活。
需要我针对具体业务场景(如购物车、树形结构、API数据处理)举例,或者对比 PHP 数组 vs Python 字典/列表 的区别吗?
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)