Урок 18. Способы перебора элементов массивов

При работе с массивами в языке программирования php множество задач решается с помощью перебора их элементов. Для этого используют рассмотренные в прошлых уроках циклические конструкции (for, whilе…) или конструкцию  foreach, которая была специально создана для работы с массивами.

Давайте для начала рассмотрим способ перебора массива с помощью цикла whilе:

<?php
$goroda = array (“Токио”, “Пекин”, “Москва”);
$index = 0;
$elements = count ($goroda);
while ($index < $elements) {
echo $index+1 . “.” . $goroda[$index] . “<br>”;
$index++;
}
?>

В результате работы этого скрипта мы увидим на экране следующую информацию:

1. Токио

2. Пекин

3. Москва

Скорее всего в данном примере Вы столкнулись с несколькими незнакомыми или непонятными моментами.  Поэтому давайте рассмотрим этот скрипт более детально.

Вначале создается массив $goroda с 3 элементами:

$goroda [0] = “Токио”,

$goroda [1] = “Пекин”,

$goroda [2] = “Москва”

Потом инициализируются 2 переменные: $index и $elements. Первая выступает ключом (индексом) для последующего обращения внутри цикла к элементам массива. Эта переменная получила значение 0, так как индексация массивов в php начинается с нуля.

Переменная $elements получила значение, которое вернула встроенная функция count(). Встроенная функция count() возвращает количество элементов массива, имя которого задается в аргументе. В примере 3 элемента, поэтому значение $elements будет равняться трем.

Итерация в цикле согласно условию выполняется до тех пор, пока индекс элементов не будет равнятся максимальному количеству элементов в перебираемом масссиве (не забываем, что переменная $index равна нулю, а не единице). На экран  при помощи команды echo выводится результат операции конкатенации. В конце выполняется инкремент (увеличение переменной $index на единицу). Не забывайте об этом нюансе, так как он позволяет работать с последующими элементами массива и обеспечивает прекращение работы цикла, когда заданное условие выполнено.

Пример выполнения этой ж задачи с помощью цикла for:

<?php
$goroda = array (“Токио”, “Пекин”, “Москва”);
for ($index = 0; $index < count ($goroda); $index++){
echo $index+1 . “.” . $goroda[$index] . “<br>”;
}
?>

Циклы удобно использовать для перебора индексных массивов, так как выполняются операции с целочисленными индексами. Эту задачу также можно решить и с помощью конструкции foreach. Всего есть 2 способа записи данной конструкции:

foreach (название_масссива as $value)
какое-то выражение;
foreach (название as $key => $value)
какое-то выражение;

Ключ элемента передается в переменную $key, значение в свою очередь присваивается переменной $value. В то время как в первом варианте записи доступно только значение элемента, во втором доступным является еще и его ключ. Пример:

<?php
$goroda = array (“Токио”, “Пекин”, “Москва”);
foreach ($goroda as $value){
echo $value . “<br>”;
}
?>

Чаще всего конструкцию foreach в php  используют для перебора ассоциативных массивов. Рассмотрим следующий пример:

<?php
$goroda = array (
“login” => “Admin”,
“paswd” => “gh360D12lJ”,
“email” => “adm@somemail.com”,
“profession” => “php programmer”
);
foreach ($goroda as $key => $value){
echo $key . “:” . $value . “<br>”;
}
?>

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

<?php
$polzovateli = array (
0 => array (
“login” => “Admin”,
“paswd” => “gh360D12lJ”,
“email” => “adm@somemail.com”,
“profession” => “php programmer”
)
1 => array (
“login” => “Alex”,
“paswd” => “hd240lbDsA0”,
“email” => “alex@somemail.com”,
“profession” => “engineer”
)
2 => array (
“login” => “James”,
“paswd” => “lre54c0Sdv0f”,
“email” => “james@somemail.com”,
“profession” => “dancer”
)
);
echo “<table border=2>”;
echo “<tr><td>Логин</td><td>Пароль</td><td>E-mail</td><td>Профессия</td></tr>”;
for ($index = 0; $index < count($polzovateli); $index++){
echo “<tr>”;
foreach ($polzovateli[$index] as $value){
echo “<td>” . $value . “</td>”;
}
echo “</tr>”;
}
echo “</table>”;
?>

Данный скрипт выведет на экран в виде удобной таблицы массив $polzovateli. Если Вам необходимо просмотреть структуру и значения элементов массива без красивого вывода, то используйте встроенную функцию print_r(). У нее следующий синтаксис:

bool print_r (mixed expression[, bool return]);

Пример использования на практике:

print_r ($polzovateli);

Рекомендуем самостоятельно поэксперементировать с данной php функцией.