Здравствуйте!
Интересуют методы
next()
,
key()
,
current()
, их применение. . . На сайте p**p.net сказано что метод
key()
возвращает значение ключа для текущего элемента массива, ок всё вроде ясно! НО...
1) получается у каждого созданного массива в php где- то под капотом есть индексатор текущих элементов? Если да, то где это можно проверить, потому-что возникает след. вопрос
2) допустим ситуацию, у меня есть пользовательский ассоциативный массив, и я по каким то причинам использую while(){}
для пробега по его элементам, для выполнения каких-либо действий. . .
$user_ar = array(
'name'=>'Alex',
'id'=>1234,
'state'=>'offline'
);
while(key($user_ar)){
echo key($user_ar);
echo '=>';
echo current($user_ar);
echo '<hr>';
next($user_ar);
};
Но вот в чём суть, получается данным циклом я передвигаю с помощью метода
next()
тот самый "внутренний указатель массива" тем самым получается после окончания работы вайла указатель находится на последнем элементе массива, и соответственно при попытки воспроизвести данный цикл вайл снова я не получаю никакого вывода, что собственно "наверное" не удивительно, т.к. опять же на p**p.net написано что если указатель находится вне границ массива (собственно мы его и сдвинули с помощью
next()
) то получается
key()
возвратит
NULL
! По итогу главный вопрос :
Зачем эти методы существуют, если в практике (ну по крайней мере на фронте, в том-же js) приходится ни один и даже не два раза обращаться к одному и тому-же объекту??, и если мы сдвигаем этот "указатель" с помощью некста() получается что это какие-то одноразовые методы , т.к. вторично на том-же пользовательском объекте (ну по крайней мере с моими знаниями) я его получается не смогу использовать, ну разве что если этот массив пересоздавать каждый раз, и итеррировать уже новый . . .
3) Ну и если ответы будут простыми и не многословными , то просьба ещё объяснить то, чего я не нашёл про эти три метода, или быть может упустил. . . Почему
$user_ar = array(
'name'=>'Alex',
0=>10,
'me'=>20
);
while(key($user_ar)){
echo key($user_ar);
echo '=>';
echo current($user_ar);
echo '<hr>';
next($user_ar);
};
.. не выводит индексированные элементы, а только именно названные (ну т.е. типа "name"=>"John"), причем я так понял (судя из примера выше) "натыкаясь" на индексированный элемент, внутренний указатель массива парализует, и он перестаёт итерировать дальше! В общем спасибо всем, кто откликнется!