PHP Array 数组核心语法与操作指南

洛溪
洛溪
发布时间:2026-10-15| 3人浏览过
原创

PHP 中的 array 是支持多种数据结构的有序映射类型,既可作为索引数组也可作为关联数组使用。本文深入解析数组的创建语法、键名类型转换与覆盖机制、正确的访问方式以及数组解包的高级用法,旨在帮助开发者避免常见的编码错误并提升代码规范性。

理解 PHP 数组本质

PHP 的 array 是一种有序映射(Ordered Map),它将 values 关联到 keys。这种设计使其能够灵活地充当数组、列表、哈希表、字典、集合、堆栈或队列等多种角色。由于 array 的值也可以是另一个 array,因此天然支持树形结构和多维数组。

数组的创建与定义

第1步:使用关键字创建数组

目的:初始化一个新的数组变量。 入口:直接使用 array() 语言结构。
动作:在括号内提供逗号分隔的键值对(key => value)。若省略键名,PHP 会根据之前的最大整数键名自动分配下一个整数键(默认从 0 开始)。

$arr = array(
    "foo" => "bar",
    42    => 24,
    "multi" => array(
        "dimensional" => array("array" => "value")
    )
);

第2步:使用短数组语法创建(推荐)

目的:简化代码书写,提高可读性。
入口:使用方括号 [] 替代 array()。
动作:语法逻辑完全一致,但更简洁。

$arr = [
    "foo" => "bar",
    42    => 24,
];

键名的转换与潜在风险

在定义数组时,如果多个单元使用了“相同”的键名(经过类型转换后),后面的值会覆盖前面的值。PHP 会自动将非标准的键名转换为特定类型:

  • 字符串转整数:包含有效十进制整数的字符串(如 '8')会被转为整数 8;但前导零的字符串(如 '08')不会转换,保持为字符串键名。
  • 浮点数转整数:8.7 会截断小数部分变为 8。
  • 布尔值:true 转为 1,false 转为 0。
  • Null 值:转为空字符串 ''。
  • 不可转换类型:Array 和 Object 不能作为键名,否则引发警告。

示例说明:

$array = [
    1    => 'a',     // 整数 1
    '1'  => 'b',    // 字符串 '1' 转为整数 1,覆盖上一个
    1.5  => 'c',    // 浮点 1.5 转为整数 1,覆盖上一个
    true => 'd',    // true 转为整数 1,覆盖上一个
];
// 最终结果只有一个元素,键名为 1,值为 'd'

数组的访问、修改与删除

第3步:安全访问与赋值

目的:获取或设置指定位置的数值。
重要参数:键名必须用引号包裹(单引号或双引号)。

常见错误警告:切勿使用裸字符串($arr[bar])作为索引。在旧版 PHP 中这可能碰巧运行,但在现代 PHP(8.0+)中,若 bar 未定义为常量,这会导致 Error 异常。请务必使用 $arr['bar']。

$arr['fruit'] = 'apple';    // 正确且安全的写法
echo $arr['fruit'];          // 输出 apple

第4步:动态添加与移除元素

添加:若键名为空,则追加到末尾。
删除:使用 unset() 函数。

$arr[] = 6;                // 自动寻找最大整数键 + 1
unset($arr['some_key']);   // 删除指定键

注意:unset() 不会重建索引。若需重新索引为从 0 开始的连续整数,请使用 array_values() 函数处理。

数组解包(Array Destructuring)

自 PHP 7.1 起,支持使用 [] 或 list() 将数组拆解为独立变量。这在处理返回多值的函数或遍历多维数组时非常有用。

第5步:基础与关联数组解包

动作:在赋值左侧使用括号包裹变量列表。

$source = ['foo', 'bar', 'baz'];
[$foo, $bar] = $source;     // 拆解前两个元素

$assoc = ['name' => 'John', 'age' => 30];
['name' => $name, 'age' => $age] = $assoc;

// 交换变量快捷写法
[$a, $b] = [$b, $a];

类型转换注意事项

标量类型(int、float、string、bool、resource)转换为数组时,会得到仅含单个元素且下标为 0 的数组。对象转换为数组时,属性名将变成键名:私有变量前缀为 \0ClassName\0,保护变量前缀为 \0*\0,公开变量无特殊前缀。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。