<?php declare(strict_types=1); namespace Jfcherng\Diff\Utility; final class ReverseIterator { public const ITERATOR_GET_VALUE = 0; public const ITERATOR_GET_KEY = 1 << 0; public const ITERATOR_GET_BOTH = 1 << 1; /** * The constructor. */ private function __construct() { } /** * Iterate the array reversely. * * @param array $array the array * @param int $flags the flags */ public static function fromArray(array $array, int $flags = self::ITERATOR_GET_VALUE): \Generator { // iterate [key => value] pair if ($flags & self::ITERATOR_GET_BOTH) { for (\end($array); ($key = \key($array)) !== null; \prev($array)) { yield $key => \current($array); } return; } // iterate only key if ($flags & self::ITERATOR_GET_KEY) { for (\end($array); ($key = \key($array)) !== null; \prev($array)) { yield $key; } return; } // iterate only value for (\end($array); \key($array) !== null; \prev($array)) { yield \current($array); } } }