PHP遍历数组的6种方式总结

码头散步
码头散步
发布时间:2026-10-16| 4人浏览过
原创

在PHP开发中,数组是最常用的数据结构。本文总结了遍历和处理数组的六种主要方式:foreach、array_map、array_walk、for循环、已废弃的each函数以及基于内部指针的组合操作。通过分析各自的语法特点、返回值机制及执行效率,帮助开发者根据具体需求选择最高效的遍历方案。

结果与目标

掌握不同数组遍历方法的适用场景,避免使用低效或已过时的语法,提升代码质量。

准备条件

一个基础的 PHP 环境(建议 PHP 7.0+ 及以上版本),以及需要处理的数组数据。

真实操作顺序

第1步:使用 foreach 进行遍历(推荐)

目的:快速、直观地遍历数组,支持通过引用修改值。

入口:直接作用于数组变量。

动作:

$arr = ['a', 'b', 'c'];

// 通过 &$value 引用修改原数组元素
foreach ($arr as &$amp;value) {
    $value = $value . '_i';
}
unset($amp;value); // 重要:解除引用
print_r($arr); // 输出: ['a_i', 'b_i', 'c_i']

注意:如果需要同时获取键名和值,可写为 foreach ($arr as $key => $value)。处理完引用变量后建议 unset 以防后续意外修改。

第2步:使用 array_map 映射新数组

目的:不修改原数组,返回一个新数组,适合函数式编程风格。

入口:array_map(callable $callback, array $array1, ...$arrays)

动作:

$arr = ['a', 'b', 'c'];

$arr = array_map(function ($item) {
    return $item . '_i';
}, $arr);

print_r($arr); // 输出: ['a_i', 'b_i', 'c_i']

特性:可以传入多个数组作为参数,遍历次数以最长数组为准。较短数组对应的参数将为 null。

第3步:使用 array_walk 原地修改

目的:通过引用传递直接修改原数组中的元素,仅适用于单个数组。

入口:array_walk(array &$array, callable $callback, mixed $userdata = null)

动作:

$arr = ['a', 'b', 'c'];

array_walk($arr, function (&$item) {
    $item = $item . '_i';
});

print_r($arr); // 输出: ['a_i', 'b_i', 'c_i']

核心点:回调函数的第一个参数必须是引用(&$item),这样对它的修改才会反映到原数组中。array_walk 没有返回值(返回布尔值表示是否成功),且只能处理一个数组(尽管可以通过 $userdata 传递额外参数)。

第4步:使用 for 循环(不推荐)

目的:在已知数组长度且索引为连续整数时使用。

动作:

$arr = ['a', 'b', 'c'];

// 每次循环调用 count() 会降低性能,建议先缓存长度
$count = count($arr);
for ($i = 0; $i < $count; ++$i) {
    if (isset($arr[$i])) { // 检查键是否存在更严谨
        $arr[$i] = $arr[$i] . '_i';
    }
}
print_r($arr); // 输出: ['a_i', 'b_i', 'c_i']

缺点:写法繁琐,且在非索引数组或非连续索引数组中容易出错或遗漏元素。性能通常低于 foreach。

第5步:使用 each 和 list(已废弃)

状态:该方法在 PHP 7.2 中被弃用,PHP 8.0 中已移除。

动作(仅作了解):

$arr = ['a', 'b', 'c'];

reset($arr);
while (list($key, $value) = each($arr)) {
    // 注意:each 会移动内部指针,需配合重置逻辑
    // 此例仅为演示旧语法,不建议在新项目中使用
}

警告:请勿在现代 PHP 项目中使用了 this 方法。

第6步:使用内部指针函数组合(极少用)

目的:利用数组内部的指针机制逐个访问元素。

包含函数:reset(), current(), key(), next()。

动作:

$arr = ['a', 'b', 'c'];

reset($arr); // 将指针重置到第一个元素
while ($value = current($arr)) {
    $currentKey = key($arr);
    $arr[$currentKey] = $value . '_i';
    next($arr); // 移动指针到下一个元素
}

print_r($arr); // 输出: ['a_i', 'b_i', 'c_i']

说明:这种方法耦合了数组的内部状态,代码可读性差且容易因指针位置错误导致死循环或遗漏,现代开发中几乎不被使用。

完成判断

通过比较运行结果和代码简洁度:foreach 是默认首选;array_map 适合需要返回新数据且不修改源数据的场景;array_walk 适合需要副作用修改源数据的场景。避免使用 for(除非必须处理索引)、each 和指针组合方式。

简要总结

以上就是PHP遍历数组的6种方式的详细内容,更多关于PHP数组处理技巧的资料请关注本站其它相关文章!

相关标签:

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

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 算法库。