ООП   PHP   web   4GL - визуальные среды

Цикл foreach PHP, работа с простыми (проиндексированными) массивами

Очень часто нам необходимо работать с массивами следующим образом. Не просто обращаться к какой-то одной ячейки массива, а банально выводить все что там есть. Если у нас имеется вот такой массив:

<?php
$data[] = "Mike";
$data[] = "root";
$data[] = "12345";
$data[] = 35;
$data[] = true;
?>

То вывести этот массив полностью достаточно легко циклом for, о котором мы поговорим в статье цикл FOR в PHP.

<?php
for($i = 0, $cnt = count($data); $i < $cnt; $i++){
	echo $data[$i]."<br>";
}
?>

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

<?php
$data['name'] = "Mike";
$data['login'] = "root";
$data['password'] = "12345";
$data['age'] = 35;
$data[10] = true;
// Здесь цикл FOR для перебора элементов массива не сработает
?>

Так что же делать в этом случае? Для этих целей у нас есть специальный цикл, который называется foreach. Записывается он так:

<?php
foreach($data as $k=>$v){
	echo "$k => $v"."<br>";
}
?>

Выведется:

name=>Mike
login=>root
password=>12345
age=>35
10=>1

Итак, в круглых скобках первым параметром мы указываем сам массив, который нам нужно вывести. Далее мы пишем ключевое слово «as», затем указываем две переменные, разделенные вот такой стрелкой =>. Обратите внимание, что означают эти переменные: в первую переменную у нас записывается ключ массива, то есть то, что находится в квадратных скобках массива — name, login, password, age, 10, а во вторую переменную записывается значение массива, то есть это будут значения Mike, root, 12345, 35, true.

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

<?php
foreach($data as $v){
	echo $v."<br>";// Выводим только значения массива
}
?>

Стрелка, которая указывается при выводе (=>) echo «$k => $v», тоже не обязательна. Это просто разделитель ключа от значения и вы вправе придумать сами любой разделитель, либо просто поставить пробел.

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

Да, вот еще что хотел сказать. По поводу ошибок. Цикл foreach тоже может выдать ошибку. Какую? Смотрите, чуть выше мы говорили, что в круглых скобках конструкции foreach мы пишем массив. Так вот, если туда приходит не массив, то в браузер нам вылетит ошибка класса Warning. Называться она будет «Invalid arguments supplied for foreach()».

Поэтому, чтобы такого не происходило, а это может произойти в том случае, если мы не уверены, что нам пришел массив, а мы его начинаем «пихать» в цикл foreach, то лучше всего сделать проверку функцией is_array() — если это массив, то тогда засунуть его в foreach:

<?php
$data['name'] = "Mike";
$data['login'] = "root";
$data['password'] = "12345";
$data['age'] = 35;
$data[10] = true;
if(is_array($data)){
	foreach($data as $k=>$v){
		echo "$k => $v"."<br>";
	}
}else{
	echo "Переменная data не массив!!!";
}
?>

Давайте теперь сделаем еще одно небольшое задание. Мы с вами, с помощью цикла foreach, нарисуем динамическое меню. Значит сама задача выглядит так:

  1. Нарисовать навигационное меню из трех пунктов
  2. Создать ассоциативный массив $menu
  3. Заполнить массив соблюдая следующие правила
  4. Используя цикл foreach отрисовать вертикальное меню

Приступим:

<?php
$menu = array(); // В начале создаем пустой массив
$menu = array(
	"Home" => 'index.php',
	"About" => 'about.php',
	"Contact" => 'contact.php',
	"Search" => 'search.php'
);
echo '<ul style="list-style-type: none">';
foreach($menu as $link=>$href){
	echo "<li><a href='$href'>$link</a></li>";
}
echo '</ul>';
?>

Собственно вот и все решение.

ООП   PHP   web   4GL - визуальные среды

Знаете ли Вы, что такое "усталость света"?
Усталость света, анг. tired light - это явление потери энергии квантом электромагнитного излучения при прохождении космических расстояний, то же самое, что эффект красного смещения спектра далеких галактик, обнаруженный Эдвином Хабблом в 1926 г.
На самом деле кванты света, проходя миллиарды световых лет, отдают свою энергию эфиру, "пустому пространству", так как он является реальной физической средой - носителем электромагнитных колебаний с ненулевой вязкостью или трением, и, следовательно, колебания в этой среде должны затухать с расходом энергии на трение. Трение это чрезвычайно мало, а потому эффект "старения света" или "красное смещение Хаббла" обнаруживается лишь на межгалактических расстояниях.
Таким образом, свет далеких звезд не суммируется со светом ближних. Далекие звезды становятся красными, а совсем далекие уходят в радиодиапазон и перестают быть видимыми вообще. Это реально наблюдаемое явление астрономии глубокого космоса. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМАФорум Рыцари теории эфира
Рыцари теории эфира
 18.10.2019 - 14:00: ЭКОЛОГИЯ - Ecology -> Биохимия мозга от проф. С.В. Савельева и не только - Карим_Хайдаров.
18.10.2019 - 07:39: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
18.10.2019 - 07:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вячеслава Осиевского - Карим_Хайдаров.
18.10.2019 - 07:26: ЭКОНОМИКА И ФИНАНСЫ - Economy and Finances -> КОЛЛАПС МИРОВОЙ ФИНАНСОВОЙ СИСТЕМЫ - Карим_Хайдаров.
17.10.2019 - 18:29: ЭКСПЕРИМЕНТАЛЬНАЯ ФИЗИКА - Experimental Physics -> Ядерные эксперименты - Карим_Хайдаров.
17.10.2019 - 06:07: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ЗА НАМИ БЛЮДЯТ - Карим_Хайдаров.
17.10.2019 - 06:05: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> КОМПЬЮТЕРНО-СЕТЕВАЯ БЕЗОПАСНОСТЬ ДЛЯ ВСЕХ - Карим_Хайдаров.
17.10.2019 - 06:01: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
16.10.2019 - 19:24: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Ю.Ю. Болдырева - Карим_Хайдаров.
14.10.2019 - 03:09: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Марины Мелиховой - Карим_Хайдаров.
13.10.2019 - 18:09: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Светланы Вислобоковой - Карим_Хайдаров.
13.10.2019 - 08:05: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Декларация Академической Свободы - Карим_Хайдаров.
Bourabai Research Institution home page

Bourabai Research - Технологии XXI века Bourabai Research Institution