Вот простой цикл
$list = array("A", "B", "C","D");
foreach ($list as $var) {
print(current($list));
}
Выход (демонстрация)
BBBB // Output for 5.2.4 - 5.5.0alpha4
BCD // Output for 4.4.1
AAAA // Output for 4.3.0 - 4.4.0, 4.4.2 - 5.2.3
Вопрос:
- Может кто-нибудь объяснить, что происходит?
- Почему я не получаю ABCD
- Даже если копия массива была сделана с помощью
foreach
, я должен получатьAAAA
, но не получать ее в текущейPHP
стабильной версии
Примечание * Я знаю, что могу просто использовать print $var
, но из PHP DOC
current - возвращает текущий элемент в массиве Функция current() просто возвращает значение элемента массива, на который на данный момент указывает внутренний указатель. Он не перемещает указатель. Если внутренний указатель указывает на конец списка элементов или массив пуст, current() возвращает FALSE.
Обновление 1 - Новое наблюдение
Благодаря Daniel Figueroa: просто обернув current
в функцию, вы получите другой результат
foreach ( $list as $var ) {
print(item($list));
}
function item($list) {
return current($list);
}
Выход (Демо)
BCDA // What the hell
Вопрос:
- Почему бы не получить "BBBB"?
- Как ток переноса в функции влияет на вывод
foreach
? - Откуда появился дополнительный "А"?
Обновление 2
$list = array("A","B","C","D");
item2($list);
function item2($list) {
foreach ( $list as $var ) {
print(current($list));
}
}
Выход (См. демонстрацию)
AAAA // No longer BBBB when using a function
Вопрос:
- Какая разница между запуском цикла в функции и запуском его вне функции, потому что вы получаете
AAAA
снаружи иBBBB
в функции в большинстве версий PHP