Итерация в PHP

PHP Сниппеты Статьи

Примеры итерации на PHP с использованием встроенных интерфейсов.

Итерация простого объекта

name = 'Иван Иванов';
        $this->age = 20;
        $this->balance = 100.00;
        $this->status = 'active';
    }

    /**
     * Итерирование.
     */
    public function iterate(): void
    {
        foreach ($this as $property => $value) {
            echo $property . ' > ' . $value . PHP_EOL;
        }
    }
}

$user = new User();

foreach ($user as $property => $value) {
    echo $property . ' > ' . $value . PHP_EOL;
}

echo PHP_EOL . '--------------------------' . PHP_EOL . PHP_EOL;

$user->iterate();

Вывод:

name > Иван Иванов
age > 20

--------------------------

name > Иван Иванов
age > 20
balance > 100
status > active

Итерация через стандартный интерфейс PHP

elements = $array;
    }

    /**
     * {@inheritDoc}
     */
    public function rewind()
    {
        echo 'Возврат к началу.' . PHP_EOL;

        reset($this->elements);
    }

    /**
     * {@inheritDoc}
     */
    public function current()
    {
        $element = current($this->elements);

        echo 'Текущий элемент: ' . $element . PHP_EOL;

        return $element;
    }

    /**
     * {@inheritDoc}
     */
    public function key()
    {
        $key = key($this->elements);

        echo 'Ключ текущего элемента: ' . $key . PHP_EOL;

        return $key;
    }

    /**
     * {@inheritDoc}
     */
    public function next()
    {
        $element = next($this->elements);

        echo 'Следующий элемент: ' . $element . PHP_EOL;

        return $element;
    }

    /**
     * {@inheritDoc}
     */
    public function valid()
    {
        $key = key($this->elements);

        $result = ($key !== null && $key !== false);

        echo 'Правильность позиции: ' . $result . PHP_EOL;

        return $result;
    }
}

foreach (new MyIterator([1, 2, 3]) as $key => $value) {
    echo $key . ' > ' . $value . PHP_EOL . PHP_EOL;
}

echo PHP_EOL . '--------------------------' . PHP_EOL . PHP_EOL;

/**
 * Своя коллекция.
 *
 * @package ITReviewChannel
 */
class MyCollection implements \IteratorAggregate
{
    /**
     * @var array $elements Элементы.
     */
    private array $elements;

    /**
     * Конструктор.
     *
     * @param  array  $elements  Элементы.
     */
    public function __construct(array $elements)
    {
        $this->elements = $elements;
    }

    /**
     * {@inheritDoc}
     */
    public function getIterator()
    {
        return new MyIterator($this->elements);
    }
}

foreach (new MyCollection(['Value 1', 'Value 2', 'Value 3']) as $key => $value) {
    echo 'Ключ/значение: [' . $key . ' > "' . $value . '"]' . PHP_EOL . PHP_EOL;
}

Вывод:

Возврат к началу.
Правильность позиции: 1
Текущий элемент: 1
Ключ текущего элемента: 0
0 > 1

Следующий элемент: 2
Правильность позиции: 1
Текущий элемент: 2
Ключ текущего элемента: 1
1 > 2

Следующий элемент: 3
Правильность позиции: 1
Текущий элемент: 3
Ключ текущего элемента: 2
2 > 3

Следующий элемент:
Правильность позиции:

--------------------------

Возврат к началу.
Правильность позиции: 1
Текущий элемент: Value 1
Ключ текущего элемента: 0
Ключ/значение: [0 > "Value 1"]

Следующий элемент: Value 2
Правильность позиции: 1
Текущий элемент: Value 2
Ключ текущего элемента: 1
Ключ/значение: [1 > "Value 2"]

Следующий элемент: Value 3
Правильность позиции: 1
Текущий элемент: Value 3
Ключ текущего элемента: 2
Ключ/значение: [2 > "Value 3"]

Следующий элемент:
Правильность позиции:

Полезные ссылки


Комментарии (0)

Войдите, чтобы оставить комментарий.