PHP 8.2 में शब्दकोश और हैश तालिकाएँ: विस्तृत मार्गदर्शिका
Словари и хеш-таблицы в PHP
Что такое словарь и зачем он нужен?
Представь, что у тебя есть коробка с ячейками, и на каждой ячейке написан номер. В обычном списке (массиве) номера идут по порядку: 0, 1, 2... Но что если мы хотим хранить данные не по номерам, а по именам? Например, у каждого твоего друга есть имя, и ты хочешь быстро найти его номер телефона по имени.
Для этого в программировании есть словари (ещё их называют ассоциативными массивами или хеш-таблицами). Они работают как настоящий словарь: у тебя есть ключ (например, слово "Россия"), и по нему ты находишь значение (например, "Здравствуйте!").
Основной синтаксис в PHP 8.2
В PHP словарь создаётся с помощью квадратных скобок [], где слева от => идёт ключ, а справа — значение:
<?php
// Словарь: страна => приветствие
$greetings = [
"Россия" => "Здравствуйте!",
"Франция" => "Bonjour!",
"Италия" => "Ciao!",
"Япония" => "Konnichiwa!"
];
// Выводим приветствие для Франции
echo $greetings["Франция"]; // Выведет: Bonjour!
?>
Ключом может быть строка или число. Значением — что угодно: строка, число, даже другой массив.
Как добавлять, менять и удалять элементы
Работать со словарём очень просто:
<?php
// Создаём пустой словарь
$phonebook = [];
// Добавляем запись
$phonebook["Анна"] = "+7-999-123-45-67";
$phonebook["Петя"] = "+7-999-765-43-21";
// Меняем существующую запись
$phonebook["Анна"] = "+7-911-111-22-33";
// Удаляем запись
unset($phonebook["Петя"]);
// Проверяем, есть ли ключ
if (isset($phonebook["Анна"])) {
echo "Анна: " . $phonebook["Анна"];
}
?>
Как получить все ключи и все значения
Иногда нужно просто посмотреть, какие у нас есть ключи (например, названия товаров) или только значения (цены). Для этого есть специальные функции:
<?php
$products = [
"Хлеб" => 50,
"Молоко" => 80,
"Яблоки" => 120
];
// Получаем только названия товаров (ключи)
$names = array_keys($products);
print_r($names); // Array([0]=>Хлеб [1]=>Молоко [2]=>Яблоки)
// Получаем только цены (значения)
$prices = array_values($products);
print_r($prices); // Array([0]=>50 [1]=>80 [2]=>120)
?>
Разбор типичных задач
Задача 1: Приветствие для путешественника
У нас есть словарь стран и приветствий. Пользователь вводит название страны, программа выводит приветствие.
<?php
$greetings = [
"Россия" => "Здравствуйте!",
"Франция" => "Bonjour!",
"Италия" => "Ciao!",
"Испания" => "¡Hola!"
];
echo "Введите название страны: ";
$country = trim(fgets(STDIN));
if (isset($greetings[$country])) {
echo "Приветствие: " . $greetings[$country] . "\n";
} else {
echo "Извините, приветствие для этой страны не найдено.\n";
}
?>
Задача 2: Телефонный справочник
Ищем номер телефона по имени:
<?php
$phonebook = [
"Мария" => "8-495-123-45-67",
"Иван" => "8-495-765-43-21",
"Ольга" => "8-495-111-22-33"
];
echo "Введите имя для поиска: ";
$name = trim(fgets(STDIN));
if (array_key_exists($name, $phonebook)) {
echo "Телефон $name: " . $phonebook[$name] . "\n";
} else {
echo "Контакт не найден.\n";
}
?>
Задача 3: Планировщик дел на неделю
Каждый день недели — это ключ, а список дел — это массив значений:
<?php
$weekPlan = [
"Понедельник" => ["Купить хлеб", "Позвонить врачу"],
"Вторник" => ["Сходить в спортзал"],
"Среда" => ["Убраться в комнате", "Помыть посуду"]
];
echo "Введите день недели: ";
$day = trim(fgets(STDIN));
if (isset($weekPlan[$day])) {
echo "Дела на $day:\n";
foreach ($weekPlan[$day] as $task) {
echo "- $task\n";
}
} else {
echo "На этот день дел нет.\n";
}
?>
Задача 4: Удаление контакта из блокнота
<?php
$contacts = [
"Анна" => "8-999-111-22-33",
"Борис" => "8-999-444-55-66",
"Вика" => "8-999-777-88-99"
];
echo "Введите имя для удаления: ";
$name = trim(fgets(STDIN));
if (isset($contacts[$name])) {
unset($contacts[$name]);
echo "Контакт '$name' удалён.\n";
} else {
echo "Такого контакта нет.\n";
}
echo "Остались контакты:\n";
foreach ($contacts as $name => $phone) {
echo "$name: $phone\n";
}
?>
Задача 5: Список товаров магазина
<?php
$products = [
"Хлеб" => 50,
"Молоко" => 80,
"Яблоки" => 120,
"Сыр" => 250
];
echo "Список товаров:\n";
foreach ($products as $name => $price) {
echo "$name - $price руб.\n";
}
?>
Частые ошибки новичков
- Ошибка 1: Пытаться обратиться к ключу, которого нет. Всегда проверяй через
isset()илиarray_key_exists(). - Ошибка 2: Путать ключи и значения. Запомни: слева от
=>— ключ (имя), справа — значение (телефон, цена). - Ошибка 3: Забывать кавычки у строковых ключей. Ключ "Россия" — это строка, её нужно писать в кавычках.
- Ошибка 4: Использовать
echoдля вывода всего словаря сразу. Для этого естьprint_r()илиvar_dump().
Итоговый пример: программа для учёта оценок учеников
Представь, что ты учитель. У тебя есть класс, и ты хочешь записывать оценки учеников по имени. Словарь отлично подходит: ключ — имя ученика, значение — массив его оценок.
<?php
// Словарь: имя ученика => список оценок
$grades = [
"Алиса" => [5, 4, 5, 3],
"Борис" => [3, 4, 4],
"Вика" => [5, 5, 5, 5, 5]
];
echo "Введите имя ученика: ";
$name = trim(fgets(STDIN));
if (!isset($grades[$name])) {
echo "Ученик '$name' не найден.\n";
exit;
}
$studentGrades = $grades[$name];
$average = array_sum($studentGrades) / count($studentGrades);
echo "Оценки $name: " . implode(", ", $studentGrades) . "\n";
echo "Средний балл: " . round($average, 1) . "\n";
// Добавим новую оценку
echo "Введите новую оценку: ";
$newGrade = (int)trim(fgets(STDIN));
$grades[$name][] = $newGrade;
echo "Обновлённые оценки: " . implode(", ", $grades[$name]) . "\n";
?>
Попробуй запустить этот код! Сначала программа спросит имя, покажет оценки и средний балл, а потом попросит добавить новую оценку. Так словари помогают хранить связанные данные и быстро находить нужную информацию.