
PHP 7.2+ 中 each() 函数已被废弃并最终移除,推荐使用 foreach 替代;本文详解迁移方法、兼容性注意事项及实用示例。
php 7.2+ 中 `each()` 函数已被废弃并最终移除,推荐使用 `foreach` 替代;本文详解迁移方法、兼容性注意事项及实用示例。
在 PHP 开发中,each() 函数曾常用于逐个获取数组的当前键值对,并自动推进内部指针。但自 PHP 7.2.0 起,该函数被标记为 deprecated,并在 PHP 8.0.0 中完全移除。因此,像以下这类旧代码会触发致命错误:
list($k, $v) = each($files); // ❌ PHP Fatal error: Uncaught Error: Call to undefined function each()
✅ 推荐替代方案:foreach 循环
最直接、安全且语义清晰的替代方式是使用 foreach —— 它自 PHP 4 起即已支持,性能优异,且天然支持键值遍历:
<?php
foreach ($files as $k => $v) {
echo "Key: $k, Value: " . print_r($v, true);
// 在此处执行你的业务逻辑(如文件处理、验证等)
}? 提示:
foreach默认按数组原始顺序遍历,且不依赖也不修改数组的内部指针,行为更可预测。
⚠️ 注意事项与常见误区
-
不要试图用
key()+current()+next()模拟each():虽然技术上可行,但代码冗长、易出错,且需手动管理指针状态,违背现代 PHP 简洁原则。立即学习“PHP免费学习笔记(深入)”;
避免在循环中修改原数组结构:若需动态增删元素,建议先收集操作指令,循环结束后统一处理,防止意外跳过或重复遍历。
-
单次取一个元素?请明确意图:
each()常被误用于“只取第一个元素”。若你的真实需求只是获取首项,应改用:$firstKey = key($files); // 获取首个键名 $firstValue = current($files); // 获取首个值 // 或更推荐(PHP 7.3+): $first = reset($files); // 重置指针并返回首值(注意:会改变原数组指针!)
✅ 总结
| 场景 | 推荐方案 |
|---|---|
| 遍历整个数组(键+值) |
foreach ($arr as $k => $v) ✅ |
| 仅需首个键值对 |
reset($arr); $k = key($arr); $v = current($arr);(慎用)或改写逻辑为 array_key_first()(PHP 7.3+)+ array_values() 组合 |
| 需要指针控制的复杂迭代 | 考虑封装为 Iterator 对象或使用 ArrayIterator 类 |
迁移 each() 不仅是为了消除警告,更是拥抱 PHP 更健壮、更易维护的迭代范式。从今天起,请坚定使用 foreach —— 简洁、高效、向后兼容,且被所有主流框架与规范所推崇。



















