Массивы (списки) в PHP 8.2: подробное руководство
Массивы (списки) в PHP
Что такое массив и зачем он нужен?
Представь, что у тебя есть коробка, в которую можно складывать разные предметы. В программировании такая «коробка» называется массивом (или списком).
Зачем это нужно? Допустим, ты записываешь названия всех фруктов, которые привезли в магазин за неделю. Если записывать каждое название в отдельную переменную, получится так:
$fruit1 = 'яблоко';
$fruit2 = 'банан';
$fruit3 = 'апельсин';
// ... и так 20 раз
Это очень неудобно! А с массивом мы просто говорим: «Вот список фруктов» — и храним всё в одной переменной.
Массив — это упорядоченный набор элементов. У каждого элемента есть свой номер (индекс), начиная с 0.
Создаём массив
В PHP 8.2 массив создаётся с помощью квадратных скобок []:
<?php
// Список фруктов
$fruits = ['яблоко', 'банан', 'апельсин', 'груша'];
// Список чисел
$numbers = [10, 20, 30, 40, 50];
?>
Элементы разделяются запятыми. Внутри массива могут быть строки, числа — любые данные.
Как достать элемент из массива
У каждого элемента есть индекс. Первый элемент — индекс 0, второй — 1 и так далее.
<?php
$fruits = ['яблоко', 'банан', 'апельсин'];
echo $fruits[0]; // выведет: яблоко
echo $fruits[2]; // выведет: апельсин
?>
Как изменить элемент
Просто присваиваем новое значение по индексу:
<?php
$fruits = ['яблоко', 'банан', 'апельсин'];
$fruits[1] = 'киви'; // теперь вместо банана — киви
echo $fruits[1]; // выведет: киви
?>
Как добавить новый элемент
Если просто написать пустые скобки [], PHP сам добавит элемент в конец списка:
<?php
$fruits = ['яблоко', 'банан'];
$fruits[] = 'апельсин'; // добавили в конец
print_r($fruits); // выведет весь массив
?>
Как узнать длину массива
Функция count() считает количество элементов:
<?php
$fruits = ['яблоко', 'банан', 'апельсин'];
echo count($fruits); // выведет: 3
?>
Перебор массива в цикле
Чаще всего мы проходимся по всем элементам с помощью foreach:
<?php
$fruits = ['яблоко', 'банан', 'апельсин'];
foreach ($fruits as $fruit) {
echo "Сегодня купили: $fruit\n";
}
// Выведет:
// Сегодня купили: яблоко
// Сегодня купили: банан
// Сегодня купили: апельсин
?>
Если нужен ещё и номер элемента (индекс), пишем так:
<?php
$fruits = ['яблоко', 'банан', 'апельсин'];
foreach ($fruits as $index => $fruit) {
echo "Позиция $index: $fruit\n";
}
// Выведет:
// Позиция 0: яблоко
// Позиция 1: банан
// Позиция 2: апельсин
?>
Разбираем задачи, похожие на твои
Задача 1. Список фруктов (ввод и вывод)
Представь, что каждый день ты добавляешь фрукт в список. В конце нужно вывести всё, что есть.
<?php
// Допустим, мы вводим фрукты через пробел
$input = trim(fgets(STDIN)); // пользователь вводит: яблоко банан апельсин
$fruits = explode(' ', $input); // превращаем строку в массив
echo "Список всех фруктов:\n";
foreach ($fruits as $fruit) {
echo "- $fruit\n";
}
?>
Ввод: яблоко банан апельсин груша
Вывод:
Список всех фруктов:
- яблоко
- банан
- апельсин
- груша
Задача 2. Исправляем ошибку в списке (удвоение значения)
В школьной столовой повар заметил, что во втором пункте (индекс 1) неправильное количество хлеба. Нужно удвоить.
<?php
// Список продуктов: [молоко, хлеб, масло, сыр]
$products = [10, 5, 3, 7]; // количество каждого продукта
// Удваиваем количество хлеба (индекс 1)
$products[1] = $products[1] * 2;
echo "Новое количество хлеба: " . $products[1] . "\n";
print_r($products); // посмотрим весь массив
?>
Вывод:
Новое количество хлеба: 10
Array
(
[0] => 10
[1] => 10
[2] => 3
[3] => 7
)
Задача 3. Найти высоту больше заданной (альпинист)
Вася записывает высоту каждый день. Надо найти дни, когда высота была больше 2000 метров.
<?php
// Высоты за 5 дней
$heights = [1500, 2100, 1800, 2500, 1900];
echo "Дни, когда высота больше 2000 м:\n";
foreach ($heights as $day => $height) {
if ($height > 2000) {
echo "День " . ($day + 1) . ": $height м\n";
}
}
?>
Вывод:
Дни, когда высота больше 2000 м:
День 2: 2100 м
День 4: 2500 м
Обрати внимание: мы прибавили 1 к номеру дня, потому что индексы начинаются с 0, а люди считают дни с 1.
Частые ошибки новичков
- Ошибка 1: Забывают, что индексы начинаются с 0. Если в массиве 3 элемента, последний имеет индекс 2, а не 3.
- Ошибка 2: Пытаются обратиться к несуществующему индексу. PHP выдаст предупреждение. Всегда проверяй, есть ли элемент, с помощью
isset(). - Ошибка 3: Путают
foreachсfor. Для новичковforeachпроще и безопаснее — он сам проходит по всем элементам. - Ошибка 4: Забывают про
trim()при вводе. Если пользователь ввёл строку с пробелами в конце,explodeсоздаст лишние пустые элементы.
Итоговый пример: Робот-сортировщик
Робот получает список серийных номеров деталей. Нужно оставить только те, которые больше 100 (годные), и вывести их.
<?php
// Вводим номера через пробел: 45 120 89 200 55 150
$input = trim(fgets(STDIN));
$details = explode(' ', $input);
$good_details = []; // массив для годных деталей
foreach ($details as $number) {
if ($number > 100) {
$good_details[] = $number; // добавляем в новый массив
}
}
echo "Годные детали (номер > 100):\n";
foreach ($good_details as $detail) {
echo "- $detail\n";
}
?>
Ввод: 45 120 89 200 55 150
Вывод:
Годные детали (номер > 100):
- 120
- 200
- 150
Мы создали новый массив $good_details и добавили в него только те элементы, которые прошли проверку. Это называется «фильтрация массива».
Теперь ты знаешь главное о массивах в PHP: как их создавать, изменять, перебирать и фильтровать. Эти навыки пригодятся в любой задаче, где нужно работать со списками данных!