PHP each() 函数
最后修改于 2025 年 3 月 13 日
PHP 的 each
函数返回数组中的当前键值对,并移动数组指针。它对于数组迭代很有用。
基本定义
each
函数返回数组中的当前元素,并将内部指针向前移动。它返回一个包含四个元素的数组。
语法:each(array &$array): array|false
。当指针到达末尾时返回 false。返回的数组包含 'key'、'value'、0 和 1。
基本 each() 示例
本示例演示了 each
迭代数组的基本用法。
basic_each.php
<?php $fruits = ["apple" => "red", "banana" => "yellow", "grape" => "purple"]; while ($element = each($fruits)) { echo "Key: " . $element['key'] . ", Value: " . $element['value'] . "\n"; echo "0: " . $element[0] . ", 1: " . $element[1] . "\n\n"; }
此代码使用 each
遍历数组。每次调用都会返回当前的键值对,并向前移动指针,直到到达末尾。
将 each() 与 list() 结合使用
each
可以与 list
结合使用以获得更简洁的代码。
each_with_list.php
<?php $colors = ["red", "green", "blue"]; reset($colors); // Ensure pointer is at start while (list($key, $val) = each($colors)) { echo "$key => $val\n"; }
在这里,list
将 each
返回的键值对解包。这种模式在 PHP 7.2 之前很常见,但现在已弃用。
带关联数组的 each()
each
与关联数组配合得特别好。
associative_each.php
<?php $user = [ "name" => "John Doe", "email" => "john@example.com", "age" => 30 ]; while ($pair = each($user)) { echo "Field: " . $pair['key'] . ", Value: " . $pair['value'] . "\n"; }
此示例展示了 each
如何访问关联数组中的键和值。该函数返回数字和字符串索引。
在 each() 之前重置指针
在循环中使用 each
之前,务必重置数组指针。
reset_pointer.php
<?php $numbers = [10, 20, 30]; // First iteration while ($element = each($numbers)) { echo $element['value'] . " "; } echo "\n"; // Reset pointer for second iteration reset($numbers); while ($element = each($numbers)) { echo $element['value'] . " "; }
如果没有 reset
,第二个循环将不会执行,因为指针在第一次循环后就已经指向了数组的末尾。
弃用通知
此示例显示了 PHP 7.2+ 中的弃用警告以及替代方法。
deprecation_notice.php
<?php $data = ["a", "b", "c"]; // Deprecated in PHP 7.2+, removed in PHP 8.0 while (list($key, $val) = each($data)) { echo "$key: $val\n"; } // Modern alternative foreach ($data as $key => $val) { echo "$key: $val\n"; }
each
函数自 PHP 7.2 起已弃用。此示例同时显示了旧语法和推荐的 foreach
替代方案。
最佳实践
- 新代码中避免使用:使用
foreach
替代each
。 - 指针管理:迭代前始终重置指针。
- 错误处理:正确检查 false 返回值。
- 现代替代方案:如果需要,优先使用
current
/next
。
来源
本教程通过实际示例介绍了 PHP each
函数,展示了其在数组迭代场景中的用法。
作者
列出 所有 PHP 数组函数。