/
Вопросы и ответы
/
PHP
/

Как сделать поиск в php массиве по значению

Как сделать поиск в php массиве по значению

5 лет назад

Человек-Молекула

Ответы

0

Можно использовать встроенную функцию array_search(), она возвращает ключ найденного элемента. Затем мы можем получить и сам элемент по этому ключу.

1
2
3
4
5
<?php

$numbers = [1, 2, 'salad', 'potato'];
$potatoIndex = array_search('potato', $numbers); // 3
print_r($numbers[$potatoIndex]); //=> potato

5 лет назад

Roman Ashikov

0

Поиск значения с помощью цикла foreach().

1
2
3
foreach ($array as $value) {
    ...
}
1
2
3
foreach ($array as $key => $value) {
    ...
}

Если значение подразумевает не полное соответствие, а частичное, то применяют обычно цикл с проверкой на вхождение искомого значения в значениях массива:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

$array = [
    'key1' => 'value1',
    'key2' => 'value2',
    'key3' => 'value3',
    'key4' => 'value4',
    'key5' => 'value5',
];

$result = '';
foreach ($array as $value) {
    if (str_contains($value, '5')) {
        $result = $value;
    }
}

echo($result); // => value5

4 года назад

Аслан Аутлев

0

Есть ли значение в массиве, проверяет in_array(). Ключ найденного элемента возвращает array_search():

1
2
3
4
5
$fruits = ['яблоко', 'груша', 'слива'];

var_dump(in_array('груша', $fruits));    // bool(true)
var_dump(array_search('груша', $fruits)); // int(1)
var_dump(array_search('банан', $fruits)); // bool(false)

Ловушка с нулевым ключом

array_search() может вернуть 0 — ключ первого элемента. В условии 0 равен false:

1
2
3
if (array_search('яблоко', $fruits)) {
    // сюда не попадём: ключ 0
}

Сравнивайте строго:

1
2
3
4
$key = array_search('яблоко', $fruits);
if ($key !== false) {
    echo "Найдено под ключом $key";
}

Строгое сравнение типов

По умолчанию сравнение нестрогое: in_array('1', [1, 2]) вернёт true. С третьим аргументом true типы тоже сравниваются:

1
2
in_array('1', [1, 2], true);      // false
array_search('1', [1, 2], true);  // false

Все ключи с этим значением

1
2
$numbers = [3, 7, 3, 9];
print_r(array_keys($numbers, 3)); // [0, 2]

Поиск в массиве массивов

Найти пользователя по email:

1
2
3
4
5
6
7
$users = [
    ['id' => 1, 'email' => 'anna@example.com'],
    ['id' => 2, 'email' => 'oleg@example.com'],
];

$key = array_search('oleg@example.com', array_column($users, 'email'));
$user = $key !== false ? $users[$key] : null;

array_column() достаёт из всех элементов один столбец, array_search() ищет в нём.

Поиск по условию

1
$expensive = array_filter($products, fn($p) => $p['price'] > 1000);

В PHP 8.4 появилась array_find() — возвращает первый подходящий элемент.

Частый поиск

in_array() перебирает массив целиком. Если проверять приходится часто, сделайте значения ключами: isset($flipped['груша']) работает мгновенно.

1
$flipped = array_flip($fruits);

Массивы в PHP разбирают в профессии «PHP-разработчик».

10 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845