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 数组函数。