«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как искать в ассоциативном массиве PHP – быстрые советы

Как искать в ассоциативном массиве PHP – быстрые советы

Опубликовано 7 ноября 2024 г.
Просматривать:724

Ассоциативные массивы — это фундаментальная структура данных в PHP, позволяющая разработчикам хранить пары ключ-значение. Они универсальны и обычно используются для представления структурированных данных. Поиск определенных элементов в ассоциативном массиве PHP — обычная задача. Но большинство встроенных функций PHP прекрасно работают с простыми массивами.

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

В этом уроке мы рассмотрим различные методы и приемы поиска значений в ассоциативном массиве PHP.

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

Функция array_key_exists() проверяет, существует ли определенный ключ в ассоциативном массиве. Он возвращает true, если ключ найден, и false в противном случае.

$fruits = [
    'apple' => 'red',
    'banana' => 'yellow',
];

if (array_key_exists('banana', $fruits)) {
    echo "The key 'banana' exists in the array.";
} else {
    echo "The key 'banana' does not exist in the array.";
}

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

Использование array_search() и in_array()

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

$colors = [
    'apple' => 'red',
    'banana' => 'yellow',
];

echo array_search('yellow', $colors); // Print "banana"

Вы также можете использовать в качестве значения массивы с более сложными данными:

$colors = [
    'apple' => ['red'],
    'banana' => 'yellow',
];

echo array_search(['red'], $colors); // Print "apple"

В этом случае я предлагаю вам использовать режим строгого сравнения. Его можно запросить, передав третий логический параметр в array_search:

echo array_search(['red'], $colors, true);

Похожая на array_search() функция in_array просто возвращает логический флаг вместо ключа элемента.

/*
 * It also supports strict mode comparison, useful for working with structured data as a value.
 */
echo in_array(['red'], $colors, true); // Return "true"

Использование цикла foreach

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

$targetValue = 'yellow';

foreach ($colors as $key => $value) {
    if ($value === $targetValue) {
        echo "The value {$targetValue} is associated with the key {$key}.";
        break; // Optional: Stop searching after finding the occurrence.
    }
}

Использование array_filter()

Функция array_filter() может использоваться для фильтрации массива и возврата только тех элементов, которые прошли тестовый обратный вызов.

$colors = [
    'apple' => 'red',
    'banana' => 'yellow',
];

$filteredArray = array_filter($colors, function ($value) {
    return $value === 'red';
});

/*
 * It contains just one element: ['apple' => 'red']
 * ‘banana’ was filtered out.
 */
var_dump($filteredArray);

Тесты производительности между функциями массива PHP и foreach

Если производительность является одной из ваших проблем, этот раздел статьи наверняка вам будет интересен.

Я написал сценарий для выполнения простой операции с массивом из 200 000 элементов, используя array_map и цикл foreach. Я использовал пакет Inspector, чтобы отслеживать производительность двух операторов. Вы можете поиграть с кодом в этой песочнице: https://phpsandbox.io/e/x/5titt

$data = range(1, 200000);

$inspector->addSegment(function () use ($data) {
    array_map(fn($item) => $item * 3, $data);
}, 'array_map');

$data = range(1, 200000);

$inspector->addSegment(function () use ($data) {
    foreach ($data as $item) {
        $data[$item] = $item * 3;
    }
}, 'foreach');

Десятки выполнений показывают, что foreach стабильно лучше, чем array_map примерно на 10%.

How to Search in a PHP Associative Array – Fast tips

Но этот результат может сильно меняться в зависимости от контекстуальной среды. Если вы запустите фрагмент в песочнице, указанной выше, вы обнаружите, что foreach в 10 раз эффективнее, чем array_map. Вы можете скопировать сценарий в свою локальную среду и провести несколько тестов для себя.

В любом случае, причина, по которой foreach обычно более эффективна, чем array_map, заключается в том, что он не подразумевает использование обратного вызова. Вызов функции требует больше накладных расходов, чем непосредственное использование массива в той же области видимости. По этой причине array_map тратит немного больше времени на каждой итерации. Но это видно только для больших наборов данных. Чем меньше массив, тем незначительнее разрыв.

Впервые в инспекторе? Контролируйте свое приложение бесплатно

Инспектор — это инструмент мониторинга выполнения кода, специально разработанный для разработчиков программного обеспечения. Вам не нужно ничего устанавливать на уровне сервера, просто установите пакет композитора и все готово.

В отличие от других сложных универсальных платформ, Inspector очень прост и дружественен к PHP. Вы можете попробовать наш пакет Laravel или Symfony.

Если вам нужна эффективная автоматизация, глубокая аналитика и возможность пересылать оповещения и уведомления в вашу среду обмена сообщениями, попробуйте Inspector бесплатно. Зарегистрируйте свой аккаунт.

Или узнайте больше на сайте: https://inspector.dev

How to Search in a PHP Associative Array – Fast tips

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/inspector/how-to-search-in-a-php-associative-array-fast-tips-26o6?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163. .com, чтобы удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3