Оглавление

14.6. Перебор элементов массива

Для перебора массивов применяются три вида циклов: for, foreach и while
Цикл for используется, например, так:

 

$Mass[] = 'Один';
$Mass[] = 'Два';
$Mass[] = 'Три';
$Mass[] = 'Четыре';
$count = count($Mass);
for ($i=0; $i<$count; $i++) {
   echo $Mass[$i] . '<br>';
}
 

Следует с осторожностью пользоваться циклом for, так как функция count() возвращает  количество  существующих  элементов массива. Если  элемент не определен, то он не учитывается в подсчете. Например, следующий код выведет не все элементы массива:

 

// Отключаем вывод предупреждающих сообщений
error_reporting(E_ALL & ~E_NOTICE);
$Mass[1] = 'Один';
$Mass[2] = 'Два';
$Mass[3] = 'Три';
echo count($Mass); // Выведет: 3
echo '<br>';
$count = count($Mass);
for ($i=0; $i<$count; $i++) {
   echo $Mass[$i] . '<br>';
} // Выведет: <br><br>Один<br>Два<br>

Как видно из примера, мы не получили значение элемента с индексом 3.  Для перебора ассоциативного массива такой способ не подходит, так как индексом является не число, а строка. Вместо этого применяются другие конструкции, например:

 

$Mass['Один'] = 1;
$Mass['Два'] = 2;
$Mass['Три'] = 3;
$Mass['Четыре'] = 4;
for (reset($Mass); ($key = key($Mass)); next($Mass)) {
   echo $key . ' =&gt; ' . $Mass[$key] . '<br>';
}

В этом случае мы воспользовались следующими функциями:
□ reset() устанавливает указатель на первый элемент массива;
□ next() перемещает указатель на один элемент массива вперед;
□ key() возвращает ключ текущего элемента массива.

 

Для  перебора  элементов  ассоциативного  массива  в  обратном  порядке  надо использовать другие функции:
□ end() устанавливает указатель на последний элемент массива;
□ prev() перемещает указатель на один элемент массива назад.

 

Кроме  того, для получения  текущего  значения  элемента массива можно использовать функцию current():


$Mass['Один'] = 1;
$Mass['Два'] = 2;
$Mass['Три'] = 3;
$Mass['Четыре'] = 4;
for (reset($Mass); ($key = key($Mass)); next($Mass)) {
   echo $key . ' =&gt; ' . current($Mass). '<br>';
}

Разумеется, цикл for можно употреблять не только для работы с массивами,
но и для других целей. А вот цикл foreach предназначен исключительно для
работы с массивами. Он позволяет работать как с обычными массивами, на-
пример:

 

$Mass[] = 'Один';
$Mass[] = 'Два';
$Mass[] = 'Три';
$Mass[] = 'Четыре';
foreach ($Mass as $key) {
   echo $key . '<br>';
}

так и с ассоциативными:


$Mass['Один'] = 1;
$Mass['Два'] = 2;
$Mass['Три'] = 3;
$Mass['Четыре'] = 4;
foreach ($Mass as $key => $value) {
   echo $key . ' =&gt; ' . $value . '<br>';
}

Цикл  while  также  может  использоваться  для  работы  с массивами. Обычно
это делается с использованием сочетания функций list() и each():

 

$Mass[] = 'Один';
$Mass[] = 'Два';
$Mass[] = 'Три';
$Mass[] = 'Четыре';
while (list(, $value) = each($Mass)) {
   echo $value . '<br>';
}

$Mass['Один'] = 1;
$Mass['Два'] = 2;
$Mass['Три'] = 3;
$Mass['Четыре'] = 4;
while (list($key, $value) = each($Mass)) {
   echo $key . ' =&gt; ' . $value . '<br>';
}

Функция  each()  возвращает  текущий  элемент  массива (пару "ключ /значение"), после чего перемещает указатель.

 

3
<< Меню >>  
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити