Если `in_array()` отвечает на вопрос "есть ли?", то `array_search()` идет дальше и отвечает "если есть, то где?". Эта функция ищет в массиве заданное значение и, в случае успеха, возвращает его ключ (для ассоциативных массивов) или индекс (для нумерованных).
Этот навык крайне полезен, когда вам нужно не просто подтвердить наличие данных, но и узнать их "координаты" для дальнейших манипуляций. В этом тренажере мы разберем, как найти ключ элемента, что делать, если элемент не найден, и как избежать одной из самых коварных ловушек PHP, связанной с поиском элемента в самом начале массива. Задания покажут разницу между нестрогим и строгим поиском и научат правильно обрабатывать результаты функции.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Основы: Поиск индекса элемента
Давайте начнем с простого. У вас есть массив цветов. Используйте функцию для поиска, чтобы найти индекс (позицию) элемента 'blue' в массиве `$colors` и сохранить его в переменной `$key`. Заполните пропуски в коде.
<?php
$colors = ['red', 'green', 'blue', 'yellow'];
// Ищем индекс 'blue'
$key = input1S(input2S, $colors);
echo "Индекс 'blue' в массиве: " . $key;
?>Поиск в ассоциативном массиве
Функция `array_search()` одинаково хорошо работает и с ассоциативными массивами. В этом случае она возвращает ключ, соответствующий найденному значению. Проанализируйте код и впишите, какой ключ будет выведен на экран.
<?php
$capitals = [
'usa' => 'Washington',
'france' => 'Paris',
'japan' => 'Tokyo'
];
$key = array_search('Tokyo', $capitals);
echo $key;
?>Если элемент не найден
Что произойдет, если `array_search()` не сможет найти искомый элемент в массиве? Посмотрите на код, где мы пытаемся найти число, которого нет в списке, и выберите, что именно выведет `var_dump()`.
<?php
$numbers = [10, 20, 30];
$result = array_search(99, $numbers);
var_dump($result);
?>Главная ловушка: элемент с индексом 0
Это самый важный урок про `array_search()`. Программист ищет элемент 'admin', который находится в самом начале массива (индекс 0). Функция его находит и возвращает 0, но из-за неправильной проверки в `if` скрипт сообщает, что роль не найдена. Исправьте строку с условием, чтобы проверка работала корректно.
<?php$roles = ['admin', 'editor', 'guest'];$key = array_search('admin', $roles); // Вернет 0 // Эта проверка неверна для индекса 0if ($key) { echo "Роль найдена, индекс: " . $key;} else { echo "Роль не найдена.";}?>Строгая проверка типов
Как и `in_array()`, `array_search()` по умолчанию проводит нестрогое сравнение ( `5 == '5'` ). Чтобы включить строгую проверку ( `5 === '5'` ), нужно передать третий аргумент. Заполните пропуски из банка, чтобы найти именно строку '100', а не число.
<?php
$values = [100, 'abc', '100', 99];
// Ищем СТРОКУ '100', используя строгую проверку
$key = array_search(input1S, $values, input2S);
echo "Индекс строки '100': " . $key;
?>Что если в массиве дубликаты?
В массиве могут быть одинаковые значения. Как поведет себя `array_search()` в таком случае? Проанализируйте код и выберите, какой индекс для значения 'php' вернет функция.
<?php
$skills = ['html', 'css', 'php', 'js', 'php'];
// 0 1 2 3 4
$key = array_search('php', $skills);
echo $key;
?>Соберите скрипт поиска кода товара
Соберите из разрозненных строк PHP-скрипт, который находит товарный код (ключ) для продукта 'Juice' в ассоциативном массиве `$stock`. Выведите на экран найденный код. Некоторые части кода лишние и только запутают вас.
echo "Код товара: " . $product_code;?>$stock = ['A01' => 'Milk', 'B07' => 'Bread', 'C12' => 'Juice'];<?php$product_code = array_search('Juice', $stock);$product_code = in_array('Juice', $stock);echo $stock['C12'];