
PHP 7.2+ 中 each() 函数已被废弃并移除,推荐使用 foreach 替代;本文详解如何安全迁移旧代码,包括单次取值、多次迭代及兼容性注意事项。
php 7.2+ 中 `each()` 函数已被废弃并移除,推荐使用 `foreach` 替代;本文详解如何安全迁移旧代码,包括单次取值、多次迭代及兼容性注意事项。
在 PHP 开发中,each() 函数曾常用于获取数组当前键值对并推进内部指针(例如 list($k, $v) = each($arr))。但自 PHP 7.2.0 起,该函数被正式标记为 deprecated,并在 PHP 8.0+ 中完全移除。若你遇到类似错误:
Deprecated: Function each() is deprecated in /path/to/script.php on line X
说明你的代码仍在调用该函数,需立即升级。
✅ 推荐替代方案:foreach(最常用且语义清晰)
对于大多数场景(尤其是遍历整个数组),直接改用 foreach 是最简洁、高效且可读性强的方式:
<?php $files = ['index.php' => 1240, 'style.css' => 3560, 'script.js' => 8920];
// ❌ 已废弃(PHP 7.2+ 报错)
// list($k, $v) = each($files);
// ✅ 推荐:标准 foreach 遍历
foreach ($files as $k => $v) {
echo "File: $k → Size: $v bytes\n";
}
// 输出:
// File: index.php → Size: 1240 bytes
// File: style.css → Size: 3560 bytes
// File: script.js → Size: 8920 bytes
?
foreach自 PHP 4 起即已支持,兼容性极佳,且自动重置并管理内部数组指针,无需手动干预。
⚠️ 特殊场景:仅需获取「首个」键值对(模拟 each() 的单次行为)
若原逻辑仅依赖 each() 取第一个元素(如初始化、条件判断),可用 key()/current() 组合替代:
<?php $files = ['index.php' => 1240, 'style.css' => 3560]; // ❌ 不再安全 // list($firstKey, $firstVal) = each($files); // deprecated // ✅ 安全替代(不修改原数组指针) $firstKey = key($files); $firstVal = current($files); echo "First: $firstKey = $firstVal"; // First: index.php = 1240
⚠️ 注意:key() + current() 不会移动指针,行为与 each() 的「首次调用」一致;若需模拟 each() 的「逐次推进」效果(如循环中多次调用 each()),则必须改用 foreach 或显式 next() + key()/current(),但强烈不建议——这违背现代 PHP 的设计哲学,易出错且难以维护。
? 总结与建议
- ✅ 优先使用
foreach ($arr as $k => $v):语义明确、性能优秀、零兼容性风险; - ❌ 避免手动操作数组内部指针(如
reset()/next()/key()混用),除非有特殊需求; - ? 若需兼容 PHP
- ?️ 迁移时建议配合静态分析工具(如 PHPStan)或 IDE 全局搜索
each(,确保无遗漏。
遵循以上方式,即可彻底告别 each(),写出更健壮、可维护的现代 PHP 代码。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











