Интерфейс — Любой способ использовать ключ в итераторе (php)?

Я создал класс php, который реализует интерфейс Iterator. Я успешно могу перебрать класс так:

foreach($data as $key=>$value)
echo $key;

Это, однако, последовательно дает мне странный результат:

foreach($data as $item)
echo key($item)

Первый стиль вызывает метод key () в моем классе для каждого элемента. Последний никогда не называет это.

Я что-то пропустил? Это должно работать, не так ли?

Обновление: я думаю, что что-то упустил. Функция key не работает так, как я ожидаю, для простого массива:

$test = [['name'=>'foo'],['name'=>'bar'],['name'=>'fizz']];

foreach($test as $key=>$item)
echo $key;

foreach ($test as $item)
echo key($item);

дает мне 012namenamename … не совсем то, что я ожидал. Я думаю, что мне нужно просто использовать нотацию $ key => value, и никогда не рассчитывать на key () в цикле.

1

Решение

Ваша первая версия верна, поэтому она работает. Для краткого объяснения, почему ваш второй метод не работает, см. этот комментарий в руководстве.

Это потому что (из руководства для foreach() )

На каждой итерации значение текущего элемента присваивается значению $ value, а внутренний указатель массива увеличивается на единицу

Таким образом, ваш второй метод выбирает следующий ключ, а не текущий.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]