Обнаружение элементов в массивах PHP: способы и примеры

Раздел: Основы PHP -> Операции с массивами в PHP

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

Наиболее эффективное решение

Для проверки существования значения в массиве используется функция in_array(). Она возвращает true, если значение найдено. Для проверки существования ключа применяется array_key_exists() (или isset() с учётом null).


$fruits = ['apple', 'banana', 'orange'];
if (in_array('banana', $fruits)) {
    echo 'Элемент найден';
}

$prices = ['apple' => 100, 'banana' => 50];
if (array_key_exists('banana', $prices)) {
    echo 'Ключ существует';
}
  

удалить пустые массивы php (удалить пустые массивы из массива в php)

Элемент найден
Ключ существует
  

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

Как проверить наличие значения с учётом типа данных?

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


$array = [1, '1', 2];
if (in_array('1', $array, true)) {
    echo 'Найдена строка "1"';
} else {
    echo 'Строка не найдена (строгое сравнение)';
}
  

посчитать массив php (посчитать элементы массива в php)

Строка не найдена (строгое сравнение)
  

Php сравнить массивы (сравнить массивы в php)

Проблема:

Без третьего аргумента in_array(1, $array) найдёт и число, и строку из-за неявного преобразования типов. Решение - всегда указывать true для строгой проверки, если типы важны.

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

isset() возвращает false для ключа со значением null. Для проверки самого ключа (независимо от значения) используйте array_key_exists().


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

Php отсортировать массив (отсортировать массив в php)

Ошибка:

Использование isset() для проверки ключа, если значение может быть null, приведёт к ложному выводу. Рекомендуется array_key_exists().

Как найти позицию элемента в массиве?

Функция array_search() возвращает ключ найденного элемента или false, если не найден.


$colors = ['red', 'green', 'blue'];
$key = array_search('green', $colors);
if ($key !== false) {
    echo "Элемент найден на позиции $key";
}
  

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

Элемент найден на позиции 1
  

Php массив добавление (добавить элемент в массив в php)

Как проверить наличие элемента в многомерном массиве?

Для многомерных массивов in_array() не работает напрямую (сравнивает массивы как значения). Можно рекурсивно пройти по массиву или использовать array_walk_recursive().


$matrix = [[1,2], [3,4]];
function in_array_recursive($needle, $haystack) {
    foreach ($haystack as $item) {
        if (is_array($item)) {
            if (in_array_recursive($needle, $item)) return true;
        } else if ($item === $needle) {
            return true;
        }
    }
    return false;
}
var_dump(in_array_recursive(3, $matrix)); // bool(true)
  
- Php конец массива (получить последний элемент массива в php)

Дополнительные расширенные примеры

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

Пример

$mixed = [0, '0', false, null];
// Нестрогое сравнение
if (in_array(false, $mixed)) echo "Нестрого: найдено"; // true
// Строгое сравнение
if (in_array(false, $mixed, true)) echo "Строго: найдено"; // true (false есть)
if (in_array('0', $mixed, true)) echo "Строго: '0' найден"; // true
if (in_array(0, $mixed, true)) echo "Строго: 0 найден"; // true

Проверка наличия элемента в ассоциативном массиве по значению

Пример

$users = [
    ['name' => 'Иван', 'age' => 25],
    ['name' => 'Петр', 'age' => 30]
];
// Поиск по определённому полю
$found = false;
foreach ($users as $user) {
    if ($user['name'] === 'Петр') {
        $found = true;
        break;
    }
}
var_dump($found); // bool(true)

Использование array_column для поиска в массиве объектов

Пример

$products = [
    ['id' => 1, 'title' => 'Книга'],
    ['id' => 2, 'title' => 'Ручка']
];
$ids = array_column($products, 'id');
if (in_array(2, $ids)) {
    echo "Товар с id=2 существует";
}
Товар с id=2 существует

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

Пример

$words = ['apple', 'banana', 'orange'];
// Найти, есть ли слово, содержащее 'an'
$hasSubstring = false;
foreach ($words as $word) {
    if (strpos($word, 'an') !== false) {
        $hasSubstring = true;
        break;
    }
}
var_dump($hasSubstring); // bool(true)

Проверка наличия всех элементов одного массива в другом

Пример

$required = ['apple', 'banana'];
$available = ['apple', 'orange', 'banana'];
$allPresent = !array_diff($required, $available);
var_dump($allPresent); // bool(true)

Обработка ошибок: пустой массив

Пример

$empty = [];
var_dump(in_array('anything', $empty)); // bool(false)
var_dump(array_key_exists('key', $empty)); // bool(false)

Производительность: in_array vs array_flip + isset

Пример

// Для многократных проверок лучше перевернуть массив
$largeArray = range(1, 10000);
$flipped = array_flip($largeArray);
// Поиск 5000 раз
$start = microtime(true);
for ($i = 0; $i < 5000; $i++) {
    in_array(5000, $largeArray);
}
echo "in_array: " . (microtime(true) - $start) . " sec\n";

$start = microtime(true);
for ($i = 0; $i < 5000; $i++) {
    isset($flipped[5000]);
}
echo "isset: " . (microtime(true) - $start) . " sec";
in_array: 0.025 sec
isset: 0.002 sec

Примечание:

isset() на перевёрнутом массиве работает быстрее для многократного поиска, но потребляет память. Выбор зависит от задачи.

Проверить наличие элемента в массиве в PHP - comments

En
наличие в массиве php (php)