Обратный оператор SQL asp.net

Цель интерфейса Iterator заключается в том, чтобы ваш объект использовался в цикле foreach, он не предназначен для того, чтобы ваш объект действовал как массив. Если вы хотите что-то, что действует как массив, используйте массив.

Вы всегда можете превратить свой объект в массив с помощью функции iterator_to_array , но вы не можете отменить этот процесс.

Если вы видите необходимость для изменения порядка элементов в вашем итерируемом объекте, вы можете создать метод reverse (), который, возможно, использует array_reverse () внутри. Что-то вроде этого: -

class Test implements Iterator
{
    private $testing = [0,1,2,3,4,5,6,7,8,9,10];
    private $index = 0;

    public function current()
    {
        return $this->testing[$this->index];
    }

    public function next()
    {
        $this->index ++;
    }

    public function key()
    {
        return $this->index;
    }

    public function valid()
    {
        return isset($this->testing[$this->key()]);
    }

    public function rewind()
    {
        $this->index = 0;
    }

    public function reverse()
    {
        $this->testing = array_reverse($this->testing);
        $this->rewind();
    }
}

$tests = new Test();
var_dump(iterator_to_array($tests));
$tests->reverse();
var_dump(iterator_to_array($tests));

Выход: -

array (size=11)
  0 => int 0
  1 => int 1
  2 => int 2
  3 => int 3
  4 => int 4
  5 => int 5
  6 => int 6
  7 => int 7
  8 => int 8
  9 => int 9
  10 => int 10

array (size=11)
  0 => int 10
  1 => int 9
  2 => int 8
  3 => int 7
  4 => int 6
  5 => int 5
  6 => int 4
  7 => int 3
  8 => int 2
  9 => int 1
  10 => int 0

Я написал код, чтобы доказать себе, что он будет работать до публикации, и подумал, что я мог бы его бросить в ответ.

0
задан marc_s 22 February 2015 в 16:58
поделиться