
PHP 7.2+ 中 each() 函数已被废弃并移除,推荐使用 foreach 替代;本文详解迁移方法、兼容性处理及常见误区,助你快速安全升级旧代码。
php 7.2+ 中 `each()` 函数已被废弃并移除,推荐使用 `foreach` 替代;本文详解迁移方法、兼容性处理及常见误区,助你快速安全升级旧代码。
在 PHP 开发中,each() 函数曾常用于手动遍历数组(返回当前键值对并推进内部指针),但自 PHP 7.2 起被正式标记为 deprecated,并在 PHP 8.0 中彻底移除。你遇到的错误:
list($k, $v) = each($files); // ❌ Deprecated: each(): Calling each() is deprecated
正是这一变更的直接体现。
✅ 推荐替代方案:foreach
最简洁、高效且语义清晰的方式是改用 foreach 循环——它原生支持键值解构,无需手动维护数组指针:
<?php
// ✅ 正确写法(PHP 4+ 兼容,推荐)
foreach ($files as $k => $v) {
echo "Key: $k, Value: $v\n";
// 在此处执行你的业务逻辑(如文件处理、条件判断等)
}? 提示:
foreach默认按数组原始顺序遍历,且不会修改原数组的内部指针(与each()的副作用不同),因此更安全、更可预测。立即学习“PHP免费学习笔记(深入)”;
⚠️ 注意事项与常见误区
-
不要试图“逐行替换”:
each()是单步迭代函数,而foreach是完整循环结构。若原逻辑依赖each()的“一次取一个 + 指针移动”特性(例如分批处理、条件跳出),需重构为foreach+break/continue或结合array_keys()/array_values()显式控制:// 示例:仅处理前 3 个元素(模拟多次调用 each()) $count = 0; foreach ($files as $k => $v) { if ($count >= 3) break; // 处理 $k 和 $v $count++; } 避免
current()+key()+next()组合:虽然技术上可行,但代码冗长易错,且仍需手动管理指针,不推荐作为首选方案。兼容性无忧:
foreach自 PHP 4 起即已存在,覆盖所有现行主流版本(PHP 7.4–8.3),无需版本判断。
? 总结
| 方案 | 是否推荐 | 说明 |
|---|---|---|
foreach ($arr as $k => $v) |
✅ 强烈推荐 | 简洁、安全、高效、全版本兼容 |
while (list($k, $v) = each($arr)) |
❌ 已失效 | PHP 8.0+ 报致命错误 |
current()/key()/next() 手动组合 |
⚠️ 不推荐 | 易出错、可读性差、无必要复杂化 |
请立即更新所有含 each() 的代码,统一采用 foreach —— 这不仅是适配新版 PHP 的必需步骤,更是提升代码健壮性与可维护性的最佳实践。



















