Функция array_search()

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

Тренажер PHP

Если `in_array()` отвечает на вопрос "есть ли?", то `array_search()` идет дальше и отвечает "если есть, то где?". Эта функция ищет в массиве заданное значение и, в случае успеха, возвращает его ключ (для ассоциативных массивов) или индекс (для нумерованных).

Этот навык крайне полезен, когда вам нужно не просто подтвердить наличие данных, но и узнать их "координаты" для дальнейших манипуляций. В этом тренажере мы разберем, как найти ключ элемента, что делать, если элемент не найден, и как избежать одной из самых коварных ловушек PHP, связанной с поиском элемента в самом начале массива. Задания покажут разницу между нестрогим и строгим поиском и научат правильно обрабатывать результаты функции.

Список тем

Основы: Поиск индекса элемента

id: 38969_task_search_1

Давайте начнем с простого. У вас есть массив цветов. Используйте функцию для поиска, чтобы найти индекс (позицию) элемента 'blue' в массиве `$colors` и сохранить его в переменной `$key`. Заполните пропуски в коде.

Заполните пропуски
<?php
$colors = ['red', 'green', 'blue', 'yellow'];

// Ищем индекс 'blue'
$key = input1S(input2S, $colors);

echo "Индекс 'blue' в массиве: " . $key;
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Поиск в ассоциативном массиве

id: 38969_task_search_2

Функция `array_search()` одинаково хорошо работает и с ассоциативными массивами. В этом случае она возвращает ключ, соответствующий найденному значению. Проанализируйте код и впишите, какой ключ будет выведен на экран.

Что должно получиться?
<?php
$capitals = [
    'usa' => 'Washington',
    'france' => 'Paris',
    'japan' => 'Tokyo'
];

$key = array_search('Tokyo', $capitals);

echo $key;
?>
Сообщения
Проверить
Показать подсказку

Если элемент не найден

id: 38969_task_search_3

Что произойдет, если `array_search()` не сможет найти искомый элемент в массиве? Посмотрите на код, где мы пытаемся найти число, которого нет в списке, и выберите, что именно выведет `var_dump()`.

Выберите правильный вариант ответа
<?php
$numbers = [10, 20, 30];

$result = array_search(99, $numbers);

var_dump($result);
?>
Сообщения
Проверить
Показать подсказку

Главная ловушка: элемент с индексом 0

id: 38969_task_search_4

Это самый важный урок про `array_search()`. Программист ищет элемент 'admin', который находится в самом начале массива (индекс 0). Функция его находит и возвращает 0, но из-за неправильной проверки в `if` скрипт сообщает, что роль не найдена. Исправьте строку с условием, чтобы проверка работала корректно.

Найдите ошибку и исправьте
<?php
$roles = ['admin', 'editor', 'guest'];
$key = array_search('admin', $roles); // Вернет 0
 
// Эта проверка неверна для индекса 0
if ($key) {
    echo "Роль найдена, индекс: " . $key;
} else {
    echo "Роль не найдена.";
}
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Строгая проверка типов

id: 38969_task_search_5

Как и `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;
?>
'100'
true
false
100
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что если в массиве дубликаты?

id: 38969_task_search_6

В массиве могут быть одинаковые значения. Как поведет себя `array_search()` в таком случае? Проанализируйте код и выберите, какой индекс для значения 'php' вернет функция.

Выберите правильный вариант ответа
<?php
$skills = ['html', 'css', 'php', 'js', 'php'];
//             0      1      2      3     4

$key = array_search('php', $skills);

echo $key;
?>
Сообщения
Проверить
Показать подсказку

Соберите скрипт поиска кода товара

id: 38969_task_search_7

Соберите из разрозненных строк 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'];
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру