пятница, 16 ноября 2012 г.

Перебор элементов массива (часть 1)



Для перебора массивов применяются три вида циклов:
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>';
}













Комментариев нет:

Отправить комментарий