🐘 PHP

Массивы (списки) в 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: как их создавать, изменять, перебирать и фильтровать. Эти навыки пригодятся в любой задаче, где нужно работать со списками данных!