Конспект «Массивы и циклы в PHP»

Массив

Массив — способ хранить несколько значений в одном месте. Например:

['ehm', 'cubic', 'tehnodom', 'dg']

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

Массив можно записать в переменную, так же как строки и числа.

$название_массива = [элемент_1, элемент_2, элемент_3];

Индексы

Все элементы в массиве имеют порядковый номер, то есть индекс. Он позволяет получить доступ к какому-то конкретному элементу массива.

$films = ['Железный человек', 'Мстители', 'Тор', 'Человек-муравей'];
<p><?= $films[0] ?></p>    // Выведет на страницу: "Железный человек"

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

Запись в массив по индексу

Индексы позволяют не только получать элементы, но и записывать в массив новые данные.

Добавим в массив $favorite_food новый элемент:

$favorite_food = ['пюре', 'котлеты', 'борщ'];
$favorite_food[3] = 'пельмени';
keks_log($favorite_food[3]);    // Выведет: "пельмени"

Изменим значение элемента, который уже был в массиве:

$favorite_food = ['пюре', 'котлеты', 'борщ'];
keks_log($favorite_food[1]);    // Выведет: "котлеты"
$favorite_food[1] = 'блины';
keks_log($favorite_food[1]);    // Выведет: "блины"

Цикл while

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

Синтаксис цикла while похож на синтаксис условной конструкции — он состоит из имени цикла, условия цикла и тела цикла. Действия, указанные в теле цикла, будут выполняться снова и снова, пока условие не станет ложным.

while (условие цикла) {
  тело цикла
}
$months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];

Чтобы вывести в консоль все значения из этого массива, используем цикл while:

$index = 0;                   // Создание счётчика

while ($index < 12) {
  keks.log($months[$index]);  // Вывод элемента в консоль
  $index = $index + 1;       // Увеличение счётчика
}

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

Чтобы ограничить количество итераций, мы создали переменную-счётчик $index. С каждой итерацией число в $index будет увеличиваться на единицу. В итоге в консоль по очереди выведутся элементы массива $months — числа от 1 до 12. Когда значение счётчика достигнет 12, условие станет ложным и цикл прекратит свою работу.

Цикл while в шаблоне

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

<?php while (условие): ?>
<li><?= $массив[$index] ?></li>
<?php $index = $index + 1 ?>
<?php endwhile; ?>

Команда count

Команда count позволяет посчитать количество элементов в массиве, или длину массива. Чтобы это сделать, нужно после count написать круглые скобки, а внутри скобок — название массива. А чтобы иметь возможность дальше работать с полученным значением, можно сохранить его в переменную.

$one_to_five = [1, 2, 3, 4, 5];
$number = count($one_to_five);
keks_log($number); // Выведет: 5

Нужно помнить, что команда count считает именно количество элементов, а не их индексы.

Ассоциативный массив

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

$spiderman = [
  'name' => 'Питер',    // Ключ 'name', значение 'Питер'
  'surname' => 'Паркер' // Ключ 'surname', значение 'Паркер'
];

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

keks_log($spiderman['name']);    // Выведет: "Питер"
keks_log($spiderman['surname']); // Выведет: "Паркер"

Вложенные массивы

Массивы могут содержать в себе другие массивы. Такие массивы называются вложенными.

$flowers = [
  0 => [
    'name' => 'Ромашка',
    'cost' => 'free'
  ],
  1 => [
    'name' => 'Лилия',
    'cost' => 300
  ]
];

Цикл foreach

Синтаксис цикла:

foreach ($массив as $переменная) {
  тело цикла
}

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

Цикл foreach в шаблоне

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

$fruits = ['Апельсин', 'Яблоко', 'Банан'];

<?php foreach ($fruits as $fruit): ?>
<li><?= $fruit ?></li>
<?php endforeach; ?>
// На странице появится список фруктов

Условия в цикле

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

$items = ['Стол', 'Окно', 'Кровать'];

<ul class='products-list'>
  <?php foreach($items as $item): ?>
  <?php if ($item === 'Стол'): ?>
  // Действия с разметкой
  <?php endif; ?>
  <?php endforeach; ?>
</ul>

Подробнее об условиях в части «Условия в PHP».

Оператор сравнения «строгое равенство»

В условиях часто используется оператор сравнения ===. Он называется строгое равенство и проверяет, равны ли значения слева и справа. Если равны, то условие истинно.

$item === 'Стол'
Бабушка Кекс

Притормози, дружище

Проходить вызовы части «Массивы и циклы в PHP» тренажёра «Знакомство с PHP» можно после регистрации и оформления подписки.