Использование array_map против array_column и array_combine в php

Скажем, у меня есть ассоциативный массив, как показано ниже:

$myAssocArray = [
[ 'Name' => 'AWS_Bucket-Name1',  'Value' => 'Bucket data',...],
[ 'Name' => 'AWS_Bucket-Name2',  'Value' => 'Bucket data',...],
[ 'Name' => 'AWS_Bucket-Name3',  'Value' => 'Bucket data',...],
[ 'Name' => 'AWS_Bucket-Name4',  'Value' => 'Bucket data',...],
];

Из этого я хочу создать простой ассоциативный массив, как показано ниже:

[ ['AWS_Bucket-Name1' => 'Bucket data'], ['AWS_Bucket-Name2' => 'Bucket data'], ...]

Поэтому я могу использовать два подхода, чтобы решить эту проблему:

(1) Используйте функцию array_map в php:

$destinationArray = array_map('myMapFunction', $myAssocArray);

function myMapFunction($entity): array {
   if (is_array($entity) && isset($entity['Name'], $entity['Value'])) {
      return [$entity['Name'] => $entity['Value']];
    }
}

ИЛИ ЖЕ

(2) Использование функций array_column и array_combine:

$keys = array_column($myAssocArray, 'Name');
$values = array_column($myAssocArray, 'Value');
$destinationArray = array_combine($keys, $values);

Какой подход будет более рекомендованным, а какой будет более производительным и эффективным? ИЛИ есть ли еще лучшее решение, для которого не нужен цикл foreach?

Метод array_map дает вам больше возможностей обрабатывать отсутствующие / неожиданные / несогласованные значения во входных данных. array_column / comb проще писать, но вы теряете этот уровень контроля. Производительность / эффективность будут примерно одинаковыми. Я не думаю, что это та область, где можно ожидать от оптимизации большого прироста производительности.

Don't Panic 15.03.2018 22:32

Вместо array_column и array_combine я бы предложил преобразовать ваш массив в коллекцию, а затем применить метод pluck. как это. collect($myAssocArray)->pluck('Value', 'Name')->toArray();

Rutvij Kothari 15.03.2018 22:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
1 439
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Решение array_map() сложнее понять с первого взгляда.

Вам не нужно использовать array_combine() и двойной вызов array_column(). Вместо этого вы можете передать третий аргумент array_column(), который

"index key" The column to use as the index/keys for the returned array. This value may be the integer key of the column, or it may be the string key name.

Следующий код

array_column($myAssocArray, 'Value', 'Name')

печатает тот же результат, что и требуется.

Имейте в виду, что PHP внутренне может замечать и оптимизировать множество вещей для повышения производительности. Очевидно, что лучше, когда это делает разработчик, но иногда вы получаете 1 мкс производительности за счет стоимости чистого кода и головной боли разработчика, поддерживающего этот код.

Другие вопросы по теме