PHP Ітерація
PHP - Що таке ітерація?
Ітерація — це будь-яке значення, яке можна перебрати за допомогою циклу foreach()
.
Псевдотип iterable
було представлено в PHP 7.1, і його можна використовувати як тип даних для аргументів функції та значень, що повертаються функцією.
PHP - Використання ітерації
Ключове слово iterable
можна використовувати як тип даних аргументу функції або як тип повернення функції:
Приклад
Використовуйте ітерований (повторюваний) аргумент функції:
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a", "b", "c"];
printIterable($arr);
?>
Спробуйте самі »
Приклад
Повернути ітерацію:
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
Спробуйте самі »
PHP - Створення ітерації
Масиви
Усі масиви є ітерованими, тому будь-який масив можна використовувати як аргумент функції, яка потребує ітерації.
Ітератори
Будь-який об’єкт, який реалізує інтерфейс Iterator
, можна використовувати як аргумент функції, яка вимагає ітерації.
Ітератор містить список елементів і надає методи для їх циклічного проходження. Він зберігає покажчик на один з елементів у списку. Кожен елемент у списку повинен мати ключ, за яким можна знайти цей елемент.
Ітератор повинен мати такі методи:
current()
Повертає елемент, на який зараз вказує вказівник. Це може бути будь-який тип данихkey()
Повертає ключ, пов’язаний із поточним елементом у списку. Це може бути лише ціле число, число з плаваючою точкою, логічне значення або рядокnext()
Переміщує вказівник на наступний елемент у спискуrewind()
Переміщує вказівник на перший елемент у спискуvalid()
Якщо внутрішній покажчик не вказує на жоден елемент (наприклад, якщо next() було викликано в кінці списку), це має повернути false. Він повертає true в будь-якому іншому випадку
Приклад
Реалізуйте інтерфейс Iterator і використовуйте його як iterable:
<?php
// Створити ітератор
class MyIterator implements Iterator {
private $items = [];
private $pointer = 0;
public function __construct($items) {
// array_values() переконається, що ключі є цифрами
$this->items = array_values($items);
}
public function current() {
return $this->items[$this->pointer];
}
public function key() {
return $this->pointer;
}
public function next() {
$this->pointer++;
}
public function rewind() {
$this->pointer = 0;
}
public function valid() {
// count() вказує кількість елементів у списку
return $this->pointer < count($this->items);
}
}
// Функція, яка використовує ітерації
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
// Використовуйте ітератор як ітератор
$iterator = new MyIterator(["a", "b", "c"]);
printIterable($iterator);
?>
Спробуйте самі »