Довольно часто при программировании на PHP нам приходится перебирать все без исключения элементы некоторого массива. Если наш массив — список, то эта задача, как мы уже знаем, не будет особенно обременительной:
// Ïóñòü $Names — ñïèñîê èìåí. Ðàñïå÷àòàåì èõ â ñòîëáèê
for($i=0; $i<count($Names); $i++)
echo $Names[$i]."\n";
Я стараюсь везде, где можно, избегать помещения имени переменной-массива в кавычки — например, предыдущий пример я не пишу вот так:
for($i=0; $i<count($Names); $i++)
echo "$Names[$i]\n";
Дело в том, что это, пожалуй, единственный способ, который совместим с PHP версии 3. А что касается четвертой версии, то мы спокойно можем помещать массивы в строки, заключив их в фигурные скобки вместе с символом $:
$Names=array(
array(’name’=>’Вася’, ’age’=>20),
array(’name’=>’Билл’, ’age’=>40)
);
for($i=0; $i<count($Names); $i++)
echo "{$Names[$i][’age’]}\n";
Давайте теперь предположим, что массив $Names ассоциативный: его ключи — имена людей, а значения, сопоставленные ключам — например, возраст
этих людей. Для перебора такого массива можно воспользоваться конструкцией наподобие следующей:
for(Reset($Names); ($k=key($Names)); Next($Names))
echo "Âîçðàñò $k — {$Names[$k]} ëåò\n";
Эта конструкция опирается на еще одно свойство ассоциативных массивов в PHP. А именно, мало того, что массивы являются направленными, в них есть еще и такое понятие, как текущий элемент. Функция Reset() просто устанавливает этот элемент на первую позицию в массиве. Функция key() возвращает ключ, который имеет текущий элемент (если он указывает на конец массива, возвращается пустая строка, что позволяет использовать вызов key() в контексте второго выражения for). Ну а функция Next() просто перемещает текущий элемент на одну позицию вперед.