Поиск значения в массиве PHP: полное руководство

Раздел: PHP -> Работа с массивами

Основные методы поиска значения в массиве

Самый эффективный способ проверки наличия значения в массиве - использование функции in_array(). Она возвращает true, если значение найдено, и false в противном случае. Для получения ключа найденного элемента применяется array_search().

Пример базового поиска:

$fruits = ['apple', 'banana', 'orange'];
if (in_array('banana', $fruits)) {
    echo 'Значение найдено';
}

отсортировать массив по значению php (сортировка массива по значению php)

Результат:

Значение найдено

цикл значений php (цикл по массиву в php)

Поиск ключа:

$key = array_search('orange', $fruits);
echo $key; // 2

Php получить индекс (получение индекса массива в php)

Как проверить существование ключа, а не значения?

Для проверки существования ключа используется array_key_exists() или isset(). Разница: isset() возвращает false, если значение равно null.

$data = ['name' => 'Alex', 'age' => null];
var_dump(array_key_exists('age', $data)); // true
var_dump(isset($data['age'])); // false

Php значение массива в строку (преобразование массива в строку php)

Типичная ошибка:

путать проверку ключа и значения. array_key_exists() не проверяет значение, только ключ.

Как найти значение в многомерном массиве?

Рекурсивный in_array() не работает для многомерных массивов. Необходимо написать собственную функцию или использовать array_walk_recursive().

$users = [
    ['name' => 'John', 'age' => 25],
    ['name' => 'Jane', 'age' => 30]
];
function searchInArray($needle, $haystack) {
    foreach ($haystack as $item) {
        if (in_array($needle, $item)) return true;
    }
    return false;
}
var_dump(searchInArray('Jane', $users)); // true

Php есть ли значение в массиве (поиск значения в массиве php)

Проблема:

рекурсия может привести к большому расходу памяти. Для больших массивов лучше использовать цикл с ручным обходом.

Как отфильтровать массив по значению?

array_filter() позволяет оставить только те элементы, которые удовлетворяют условию. Поиск всех вхождений значения.

$numbers = [1, 2, 3, 2, 4];
$filtered = array_filter($numbers, function($v) {
    return $v === 2;
});
print_r($filtered); // [1=>2, 3=>2]

Php удалить элемент массива по значению (php удалить элемент массива по значению)

Важно:

array_filter() сохраняет ключи. Если нужна переиндексация, используется array_values().

Как проверить наличие значения без учёта типа?

По умолчанию in_array() использует нестрогое сравнение. Для строгой проверки передаётся третий параметр true.

$arr = ['1', 2, 3];
var_dump(in_array(1, $arr));      // true (нестрогое)
var_dump(in_array(1, $arr, true)); // false (строгое)

Ошибка:

нестрогое сравнение может дать ложное срабатывание, например, строка 'abc' и число 0.
- Php между значениями (выборка значений массива в диапазоне php)
- Php значения ассоциативного массива (получение значений из ассоциативного массива php)
- Php найти значение в массиве (поиск значения в массиве php)

Расширенные примеры поиска значения в массиве

Ниже приведены более сложные сценарии с подробным кодом и результатами.

Поиск значения в многомерном массиве с получением пути

Пример
$tree = [
    'a' => ['b' => ['c' => 'target']],
    'd' => ['e' => 'other']
];

function findValueRecursive($needle, $haystack, $path = []) {
    foreach ($haystack as $key => $value) {
        $currentPath = array_merge($path, [$key]);
        if ($value === $needle) {
            return $currentPath;
        }
        if (is_array($value)) {
            $result = findValueRecursive($needle, $value, $currentPath);
            if ($result !== null) return $result;
        }
    }
    return null;
}

$path = findValueRecursive('target', $tree);
print_r($path); // Array ( [0] => a [1] => b [2] => c )

Результат:

Array
(
    [0] => a
    [1] => b
    [2] => c
)

Поиск всех ключей, соответствующих значению

Пример
$arr = ['red', 'green', 'red', 'blue'];
$keys = array_keys($arr, 'red', true);
print_r($keys); // Array ( [0] => 0 [1] => 2 )

Результат:

Array
(
    [0] => 0
    [1] => 2
)

Использование array_reduce для поиска

Пример
$items = [10, 20, 30, 40];
$found = array_reduce($items, function($carry, $item) {
    return $carry || ($item === 30);
}, false);
var_dump($found); // bool(true)

Поиск значения в ассоциативном массиве с игнорированием регистра

Пример
$data = ['Name' => 'John', 'Email' => 'john@example.com'];
$search = 'name';
$keys = array_keys(array_change_key_case($data, CASE_LOWER));
if (in_array(strtolower($search), $keys)) {
    echo 'Ключ найден (без учёта регистра)';
}

Результат:

Ключ найден (без учёта регистра)

Поиск по условию в массиве объектов

Пример
class User {
    public $name;
    public function __construct($name) {
        $this->name = $name;
    }
}

$users = [new User('Alice'), new User('Bob'), new User('Charlie')];
$result = array_filter($users, function($user) {
    return $user->name === 'Bob';
});
if (!empty($result)) {
    $bob = reset($result);
    echo $bob->name; // Bob
}

Результат:

Bob

Поиск с использованием array_walk_recursive (для многомерных)

Пример
$deepArray = [
    'level1' => [
        'level2' => [
            'target' => 42
        ]
    ]
];
$found = false;
array_walk_recursive($deepArray, function($value) use (&$found) {
    if ($value === 42) $found = true;
});
var_dump($found); // bool(true)

Поиск значения в массиве PHP - comments

En
Php найти значение в массиве (php)