﻿<h1 class=p1>Работа с курсором (указатель) массива</h1>
<table border="0" cellspacing="10">
    <tr valign="top">
        <td>
            <a class=bluelink href="#1" title="Перенос курсора (указателя) в конец массива" >end()</a>&nbsp;<br>
            <a class=bluelink href="#2" title="Перенос курсора массива (указателя) вперед на одну позицию" >next()</a>&nbsp;<br>            
        </td>
        <td>
            <a class=bluelink href="#3" title="Перенос курсора (указателя) на одну позицию назад">prev()</a>&nbsp;<br>                  
            <a class=bluelink href="#4" title="Определения текущего элемента массива, без изменения положения курсора">current()</a>&nbsp;<br>      
        </td>
        <td>        
            <a class=bluelink href="#5" title="Получение индекса текущего элемента массива">key()</a>&nbsp;<br>     
            <a class=bluelink href="#6" title="Возвращает пару "индекс - значение" текущего элемента массива и сдвигает курсор массива на следующий элемент">each()</a>&nbsp;<br>                               
        </td>
    </tr>
</table>
<br>
<p class=text>О функции <b>reset</b>()  мы с вами уже говорили. Напомним, что эта функция производит сброс курсора массива, т.е. устанавливает внутренний курсор массива на начало массива и возвращает значение первого элемента.</p> 
<a name=1></a>
<p class=text>Функция <b>end</b>() выполняет действие, обратное функции <b>reset</b>() – переносит курсор в конец массива. Синтаксис функции аналогичен синтаксису функции <b>reset</b>():</p>
<h1 class=p1>end()</h1>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
mixed <b>end</b><em class=gr>(</em>array array arr<em class=gr>)</em>
</pre></blockquote>
<br>

<a name=2></a>
<h1 class=p1>next()</h1>
<p class=text>Функция next() производит перенос курсора массива вперед на одну позицию.</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
mixed <b>next</b><em class=gr>(</em>array array arr<em class=gr>)</em>
</pre></blockquote>
<p class=text>Т.е. эта функция перемещает курсор массива на следующий элемент, при этом возвращая значение элемента, на котором находился курсор до перемещения. Если элементов в массиве больше не осталось, функция возвращает <b>false</b>. При работе с этой функцией надо не забывать про один моментик, а именно: <b>false</b> также возвращается, если курсору повстречается элемент с пустым значением. Так что, если вы хотите работать с массивами, содержащими пустые элементы, то используйте лучше функцию <b>each</b>(), о которой мы поговорим через несколько абзацев.</p>
<br>

<a name=3></a>
<h1 class=p1>prev()</h1>
<p class=text>Функция <b>prev</b>() производит перенос курсора назад на одну позицию. Синтаксис и работа функции полностью аналогичны функции <b>next</b>().</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
mixed <b>prev</b><em class=gr>(</em>array array arr<em class=gr>)</em>
</pre></blockquote>
<br>

<a name=4></a>
<h1 class=p1>current()</h1>
<p class=text>Для определения текущего элемента массива, без изменения положения курсора, используется функция <b>current</b>().</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
mixed <b>current</b><em class=gr>(</em>array array arr<em class=gr>)</em>
</pre></blockquote>
<p class=text>Функция <b>current</b>() возвращает значение элемента, на котором в данный момент находится курсор массива, при этом не сдвигая курсор. В том случае, если курсор оказался за пределами массива, или массив состоит из пустых элементов, функция возвратит <b>false</b>.</p>
<p class=text>Полным синонимом функции <b>current</b>() является функция <b>pos</b>().</p>
<br>

<a name=5></a>
<h1 class=p1>key()</h1>
<p class=text>Функция <b>key</b>() возвращает индекс текущего элемента массива.</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
mixed <b>key</b><em class=gr>(</em>array array arr<em class=gr>)</em>
</pre></blockquote>
<br>

<a name=6></a>
<p class=text>Ну а теперь поговорим об обещанной функции <b>each</b>().</p>
<h1 class=p1>each()</h1>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
array <b>each</b><em class=gr>(</em>array array arr<em class=gr>)</em>
</pre></blockquote>
<p class=text>Функция <b>each</b>() возвращает пару "индекс - значение" текущего элемента массива и сдвигает курсор массива на следующий элемент. При этом, как видно, функция возвращает массив, причем он имеет четыре элемента:</p>
<ol>
  <li>[1] => "значение"</li>
  <li>[value] => "значение"</li>
  <li>[0] => индекс</li>
  <li>[key] => индекс</li>
</ol>
<p class=text>Если курсор достиг конца массива, функция возвращает <b>false</b>. Посмотрим, как работает эта функция:</p>
<p class=prim><b><i>Пример:</i></b></p>
<blockquote><pre>
<em class=red>&lt;?</em>
   <b>$name</b> <em class=gr>=</em> array<em class=gr>(</em>"maks", "igor", "sergey"<em class=gr>);</em>
   <b>$each_name</b> <em class=gr>=</em> each<em class=gr>(</em><b>$name</b><em class=gr>);</em>
   print_r<em class=gr>(</em><b>$each_name</b><em class=gr>);
   echo(</em>"&lt;<b>br</b>>"<em class=gr>);</em>
   <b>$each_name</b> <em class=gr>=</em> each<em class=gr>(</em><b>$name</b><em class=gr>);</em>
   print_r<em class=gr>(</em><b>$each_name</b><em class=gr>);
   echo(</em>"&lt;<b>br</b>>"<em class=gr>);</em>
   <b>$each_name</b> <em class=gr>=</em> each<em class=gr>(</em><b>$name</b><em class=gr>);</em>
   print_r<em class=gr>(</em><b>$each_name</b><em class=gr>);</em>
<em class=red>?&gt;</em>
</pre></blockquote>

И что мы получили:
<p class=prim><b><i>Результат:</i></b></p>
<table class="color1" width="100%" cellpadding="12" ><tr><td>
Array
(
    [1] => maks
    [value] => maks
    [0] => 0
    [key] => 0
)
<br>Array
(
    [1] => igor
    [value] => igor
    [0] => 1
    [key] => 1
)
<br>Array
(
    [1] => sergey
    [value] => sergey
    [0] => 2
    [key] => 2
)
</td></tr></table>
<br>
<p class=text>Функцию <b>each</b>() можно использовать в паре с функцией <b>list</b>() для перебора элементов массива. К примеру, вот так:</p>
<p class=prim><b><i>Пример:</i></b></p>
<blockquote><pre>
<em class=red>&lt;?</em>
   <b>$name</b> <em class=gr>=</em> array<em class=gr>(</em>"maks", "igor", "sergey"<em class=gr>);</em>
   reset<em class=gr>(</em><b>$name</b><em class=gr>);</em>
   while<em class=gr>(</em>list<em class=gr>(</em><b>$key</b>, <b>$val</b><em class=gr>) =</em> each<em class=gr>(</em><b>$name</b><em class=gr>))
   {
      echo (</em>"<b>$key</b> <em class=gr>=</em> <b>$val</b>&lt;<b>br</b>>"<em class=gr>);
   }</em>
<em class=red>?&gt;</em>
</pre></blockquote>
И вот что на выходе:
<p class=prim><b><i>Результат:</i></b></p>
<table class="color1" width="100%" cellpadding="12" ><tr><td>
0 = maks<br>1 = igor<br>2 = sergey<br></td></tr></table>
