HoRain云--PHP 数组
2026/5/8 16:50:42 网站建设 项目流程

🎬 HoRain 云小助手:个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

1. 核心特性:有序映射 (Ordered Map)

2. 数组的类型(表现形式)

2.1 索引数组 (Indexed Array)

2.2 关联数组 (Associative Array)

2.3 混合数组

3. 基本操作速查表

4. 遍历数组 (Loop)

4.1 foreach(首选)

4.2 for循环 (仅限连续整数索引)

5. 常用数组函数(必知)

增删改查

排序

转换与过滤

6. 引用 (&) 与 复制

默认是“写时复制” (Copy On Write)

强制引用

7. 多维数组

8. 性能与陷阱

9. 现代 PHP (7.4+) 技巧

总结


PHP 中的数组(Array)是其最强大、最核心的数据结构,本质上是一个有序映射(Ordered Map)。它兼具了传统编程语言中索引数组、关联数组、链表、字典(Hash Table)和对象​ 的功能。

以下是 PHP 数组的全面解析:


1. 核心特性:有序映射 (Ordered Map)

PHP 数组不是简单的线性存储结构,而是Hash Table(哈希表)+ 双向链表

这意味着 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. 基本操作速查表

操作

代码示例

说明

创建

$arr = [];

推荐(短数组语法)

读取

$val = $arr['key'];

访问不存在的 key 会产生 Warning

赋值

$arr['new'] = 123;

若 key 不存在则新增

删除

unset($arr['key']);

删除元素,数组不会重建索引

检查存在

isset($arr['key'])

检查是否存在且不为 null

判断为空

empty($arr['key'])

检查是否为空或不存在

遍历

foreach ($arr as $k => $v)

最常用的遍历方式


4. 遍历数组 (Loop)

4.1foreach(首选)

// 只取值 foreach ($array as $value) { echo $value; } // 取键和值 foreach ($array as $key => $value) { echo "$key: $value"; }

4.2for循环 (仅限连续整数索引)

for ($i = 0; $i < count($array); $i++) { echo $array[$i]; }

5. 常用数组函数(必知)

PHP 拥有超过80+​ 个数组处理函数,以下是高频使用的:

增删改查

函数

作用

count()/sizeof()

统计元素个数

array_push()

入栈(尾部添加)

array_pop()

出栈(尾部删除)

array_shift()

头部删除

array_unshift()

头部添加

array_merge()

合并数组

排序

函数

作用

sort()

升序(重新索引)

rsort()

降序

asort()

按值升序(保持键值关联)

ksort()

按键升序

array_reverse()

反转数组

转换与过滤

函数

作用

array_keys()

获取所有键

array_values()

获取所有值(重建数字索引)

array_map()

回调函数处理每个元素

array_filter()

过滤元素

in_array()

检查值是否存在

array_key_exists()

检查键是否存在


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. 性能与陷阱

  1. 不要用array_search频繁查找:如果是大数据量,建议转为isset($map[$key])

  2. foreach中的引用陷阱

    foreach ($arr as &$value) {} unset($value); // 必须 unset,否则 $value 残留最后一个元素的引用,下次赋值会出问题。
  3. JSON 互转


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 的ListMap分开,刚开始会觉得 PHP 数组很乱,但一旦掌握其“有序映射”的本质,你会发现它极其高效和灵活。

需要我针对具体业务场景(如购物车、树形结构、API数据处理)举例,或者对比PHP 数组 vs Python 字典/列表​ 的区别吗?

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询