Ассоциативные массивы — это фундаментальная структура данных в 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() ищет значение в ассоциативном массиве и возвращает соответствующий ключ, если он найден, или 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 и вручную искать определенное значение. Это полезно, когда вам нужно выполнить сложное сравнение или манипуляцию, поскольку цикл находится в той же области массива, поэтому у вас есть доступ ко всем данным в цикле.
$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() может использоваться для фильтрации массива и возврата только тех элементов, которые прошли тестовый обратный вызов.
$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);
Если производительность является одной из ваших проблем, этот раздел статьи наверняка вам будет интересен.
Я написал сценарий для выполнения простой операции с массивом из 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%.
Но этот результат может сильно меняться в зависимости от контекстуальной среды. Если вы запустите фрагмент в песочнице, указанной выше, вы обнаружите, что foreach в 10 раз эффективнее, чем array_map. Вы можете скопировать сценарий в свою локальную среду и провести несколько тестов для себя.
В любом случае, причина, по которой foreach обычно более эффективна, чем array_map, заключается в том, что он не подразумевает использование обратного вызова. Вызов функции требует больше накладных расходов, чем непосредственное использование массива в той же области видимости. По этой причине array_map тратит немного больше времени на каждой итерации. Но это видно только для больших наборов данных. Чем меньше массив, тем незначительнее разрыв.
Инспектор — это инструмент мониторинга выполнения кода, специально разработанный для разработчиков программного обеспечения. Вам не нужно ничего устанавливать на уровне сервера, просто установите пакет композитора и все готово.
В отличие от других сложных универсальных платформ, Inspector очень прост и дружественен к PHP. Вы можете попробовать наш пакет Laravel или Symfony.
Если вам нужна эффективная автоматизация, глубокая аналитика и возможность пересылать оповещения и уведомления в вашу среду обмена сообщениями, попробуйте Inspector бесплатно. Зарегистрируйте свой аккаунт.
Или узнайте больше на сайте: https://inspector.dev
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3