Урок 14. PHP — Цикл Foreach

Представьте, что у вас есть ассоциативный массив, который вы хотите перебрать. PHP предоставляет простой способ использовать каждый элемент массива по очереди с помощью Foreach конструкции.

На простом языке это будет звучать примерно так:
«Для каждого элемента в указанном массиве выполнить этот код.»

В то время как цикл While будет продолжаться, пока выполняется некоторое условие, цикл foreach будет продолжаться, пока не пройдет через каждый элемент массива.

PHP Foreach: Пример

У нас есть ассоциативный массив, в котором хранятся имена людей в нашей компании, а также их возраст. Мы хотим знать, сколько лет каждому сотруднику, поэтому мы используем цикл по каждому элементу, чтобы распечатать имя каждого и возраст.

$employeeAges;
$employeeAges["Lisa"] = "28";
$employeeAges["Jack"] = "16";
$employeeAges["Ryan"] = "35";
$employeeAges["Rachel"] = "46";
$employeeAges["Grace"] = "34";

foreach( $employeeAges as $key => $value){
	echo "Name: $key, Age: $value <br />";
}

Получаем результат:

 Name: Lisa, Age: 28
 Name: Jack, Age: 16
 Name: Ryan, Age: 35
 Name: Rachel, Age: 46
 Name: Grace, Age: 34

Что же, результат хороший и понятный, а вот синтаксис конструкции foreach не очень легкий и понятный. Давайте разберемся в нем поподробнее.

For each синтаксис: $something as $key => $value

Все это безумие примерно переводится в: «Для каждого элемента ассоциативного массива $employeeAges я хочу обратиться к $key и значению в нем, то есть к $value.

Оператор «=>» представляет связь между ключом и значением. В нашем примере мы назвали их как ключ — $key и значение — $value. Тем не менее, было бы легче думать о них, как об имени и возрасте. Ниже в нашем примере мы так и сделаем, и обратите внимание, что результат будет тот же, потому что мы только изменили имена переменных, которые относятся к ключам и значениям.

$employeeAges;
$employeeAges["Lisa"] = "28";
$employeeAges["Jack"] = "16";
$employeeAges["Ryan"] = "35";
$employeeAges["Rachel"] = "46";
$employeeAges["Grace"] = "34";

foreach( $employeeAges as $name => $age){
	echo "Name: $name, Age: $age <br />";
}

Ну и результат, повторимся, тот же самый:

 Name: Lisa, Age: 28
 Name: Jack, Age: 16
 Name: Ryan, Age: 35
 Name: Rachel, Age: 46
 Name: Grace, Age: 34

Вот и все, в принципе синтаксис не сложный, достаточно понять суть. Если будут вопросы — задавайте, отвечу, если смогу :)

Цикл For | Содержание | Цикл Do While

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

  1. Darius — 23.03.2013 18:16

    Здесь все понятно описано. Только нужно уточнить:
    foreach( $employeeAges as $name => $age)
    после AS первая переменная всегда показывает имя массива, т. е то что в «[]» а то что после => покажет самое значене массину ну то что после = и в «» ?

  2. Stas — 24.08.2013 01:04

    Здраствуйте Darius!
    Да вы все правильно поняли!
    $employeeAges;
    $employeeAges[«Lisa»]=22;
    foreach ($employeeAges as $name=>$age)
    То есть $employeeAges=$employeeAges,
    [«Lisa»]=$name,
    22=$age
    Надеюсь вы все поняли?
    Успехов!

  3. Stas — 01.09.2013 00:45

    Друзья, здесь все прекрасно расписано! Приведу пример, если у вас есть Массив а в нем милиард имен, то вы пользуетесь циклом foreach. Смотрим пример:
    $milioni_milioni_zdes_valos;
    $…Милионы переменных…;
    foreach ($milioni_milioni_zdes_valos as $nomer_zadrota=>$zadrot) {
    echo «Номер задрота=$nomer_zadrota, Имя задрота: $zadrot»
    } И так цикл будет выполнятся и выводить номер и имя каждого перечисленого в массиве задрота! Не забудте написать в конце ехо, если не хотите чтобы ваши задроты писались без пробела и в одну строчку, или же укажите етот забыл как его, вобщем вот   гарантированный пробел в любом случае!

  4. Farhad — 31.01.2014 09:11

    спс понятно!

  5. Денис — 23.02.2014 16:59

    Почему когда я допускаю ошибку при написании пхп кода все исчезает со страницы и потом при исправлении и загрузке вновь в сеть появляется, но не сразу после загрузки, а через некоторое время?

  6. Денис — 23.02.2014 17:01

    Например этот пример с foreach у меня не отображается вообще.

  7. myblaze 23.02.2014 18:18

    Денис, вопрос с задержками к хостеру. А вообще лучше на локальной машине проверять все, тогда и задержек не будет.

  8. Ярослав — 29.06.2014 13:59

    Скажите, а зачем эта строка в начале? И без нее вроде работает
    $employeeAges;

  9. Алик — 04.08.2014 18:35

    насколько Я понимаю существуют зарезервированные (предопределенные) переменные/константы. Где их можно просмотреть, что знать?

  10. Николай — 22.06.2017 13:18

    Подскажите, как сделать так, чтобы при входе с поддомена ссылки (ну например на \css\style.css) менялись.
    Например:
    если вход осуществлен на example.com, то ссылка на стайл будет \css\style.css
    иначе же если вход осуществлен на blablabla.example.com, то ссылка на стайл будет \..\example.com\css\style.css? Заранее спасибо!

  11. Андрей — 04.08.2017 01:31

    Спасибо) Вы хорошо объясняете)

  12. Кос — 06.11.2017 01:56

    Я в восторге от подачи материала)

  13. Maxim — 17.01.2019 22:59

    А как на счёт endforeach, в каких случаях он используется? И почему в выше приведённых примерах его нет?

Добавить комментарий