Each: примеры (PHP)
each(array &$array): arrayФункция each в PHP применялась для последовательного перебора элементов массива. Она возвращала текущую пару ключ-значение и перемещала внутренний указатель массива вперед.
Функция принимала один обязательный параметр:
- &array — переменная массива, передаваемая по ссылке.
Использовалась в циклах для итерации по массиву, особенно до широкого распространения конструкции foreach. Возвращала массив из четырех элементов для текущей позиции указателя или false, если указатель вышел за пределы массива.
Пример перебора ассоциативного массива:
<?php
$array = ['имя' => 'Анна', 'возраст' => 30];
$result = each($array);
print_r($result);
?>Array
(
[1] => Анна
[value] => Анна
[0] => имя
[key] => имя
)Пример с числовым индексом:
<?php
$array = ['яблоко', 'банан'];
$result = each($array);
print_r($result);
?>Array
(
[1] => яблоко
[value] => яблоко
[0] => 0
[key] => 0
)Начиная с PHP 7.2 функция each считается устаревшей, а в PHP 8.0 удалена. Для итерации по массивам предпочтительнее использовать:
- foreach — основная конструкция для перебора массивов и объектов. Предлагает простой синтаксис и не требует ручного управления указателем.
- key() и current() с next() — комбинация функций для ручного перемещения по массиву.
- array_keys() или array_values() — для получения отдельных компонентов массива.
Конструкция foreach стала стандартом благодаря читаемости и безопасности, она не зависит от внутреннего указателя массива.
Вызов удаленной функции вызывает фатальную ошибку:
<?php
$array = [1, 2];
each($array);
?>Fatal error: Uncaught Error: Call to undefined function each()
В версиях PHP, где функция существовала, передача не массива приводила к предупреждению и возврату false:
<?php
$result = each('строка');
var_dump($result);
?>Warning: each() expects parameter 1 to be array, string given bool(false)
- PHP 7.2.0 — функция each объявлена устаревшей. Вызов генерировал предупреждение E_DEPRECATED.
- PHP 8.0.0 — функция полностью удалена из ядра языка. Попытка вызова вызывает ошибку.
Удаление связано с продвижением конструкции foreach как более эффективного и понятного способа итерации.
Реализация поведения each с использованием key(), current() и next():
<?php
function emulateEach(&$array) {
$key = key($array);
if ($key === null) {
return false;
}
$value = current($array);
next($array);
return [1 => $value, 'value' => $value, 0 => $key, 'key' => $key];
}
$data = ['цвет' => 'красный', 'код' => '#FF0000'];
$result = emulateEach($data);
print_r($result);
?>Array
(
[1] => красный
[value] => красный
[0] => цвет
[key] => цвет
)Ранее each часто использовали в паре с reset() для сброса указателя:
<?php
$array = ['первый', 'второй'];
reset($array);
while (list($key, $val) = each($array)) {
echo "$key => $val\n";
}
?>0 => первый 1 => второй
Each в Javascript
Метод entries() возвращает итератор по парам ключ-значение:
const arr = ['a', 'b'];
const iterator = arr.entries();
console.log(iterator.next().value);[0, 'a']
Each в Python
Функция enumerate() возвращает индекс и значение для итерируемых объектов:
for i, value in enumerate(['яблоко', 'банан']):
print(i, value)0 яблоко 1 банан
Each в MySQL
Прямого аналога нет, так как SQL работает с наборами записей, а не с массивами в процедурном стиле.