Matrizes associativas são uma estrutura de dados fundamental em PHP, permitindo aos desenvolvedores armazenar pares de valores-chave. Eles são versáteis e comumente usados para representar dados estruturados. Procurar elementos específicos dentro de um array associativo PHP é uma tarefa comum. Mas as funções mais nativas disponíveis em PHP funcionam muito bem com arrays simples.
Por esse motivo, muitas vezes temos que encontrar combinações de funções que nos permitam fazer as mesmas coisas em arrays associativos. Possivelmente sem erros de falta de memória?.
Neste tutorial, exploraremos vários métodos e técnicas para pesquisar valores em um array associativo PHP.
A função array_key_exists() verifica se uma chave específica existe em um array associativo. Ele retorna verdadeiro se a chave for encontrada e falso caso contrário.
$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."; }
A função array_search() procura um valor em um array associativo e retorna a chave correspondente se encontrada, ou false se não for encontrada.
$colors = [ 'apple' => 'red', 'banana' => 'yellow', ]; echo array_search('yellow', $colors); // Print "banana"
Você também pode usar arrays com dados mais complexos como valor:
$colors = [ 'apple' => ['red'], 'banana' => 'yellow', ]; echo array_search(['red'], $colors); // Print "apple"
Neste caso sugiro que você use o modo de comparação estrita. Pode ser solicitado passando um terceiro parâmetro booleano para array_search:
echo array_search(['red'], $colors, true);
Semelhante a array_search() é a função in_array que apenas retorna um sinalizador booleano em vez da chave do item.
/* * It also supports strict mode comparison, useful for working with structured data as a value. */ echo in_array(['red'], $colors, true); // Return "true"
Você pode iterar pela matriz associativa usando um loop foreach e procurar manualmente por um valor específico. Isso é útil quando você precisa fazer comparações ou manipulações complexas porque o loop reside no mesmo escopo do array, então você tem acesso a todos os dados no loop.
$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. } }
A função array_filter() pode ser usada para filtrar o array e retornar apenas os elementos que passam em um retorno de chamada de teste.
$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);
Se o desempenho é uma de suas preocupações, você certamente achará esta seção do artigo interessante.
Eu criei um script para executar uma operação simples em um array de 200.000 itens usando array_map e o loop foreach. Usei o pacote Inspector para rastrear o desempenho das duas instruções. Você pode brincar com o código nesta sandbox: 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');
Dezenas de execuções mostram que foreach é consistentemente melhor que array_map em aproximadamente 10%.
Mas esse resultado pode mudar muito com base no ambiente contextual. Se você executar o snippet no sandbox vinculado acima, descobrirá que foreach é 10x mais eficiente que array_map. Você pode copiar o script em seu ambiente local e fazer alguns benchmarks para você mesmo.
De qualquer forma, o motivo pelo qual foreach é geralmente mais eficiente que array_map é porque não implica o uso de um retorno de chamada. Há mais sobrecarga ao invocar uma função do que usar o array diretamente no mesmo escopo. Por esse motivo, array_map perde um pouco mais de tempo a cada iteração. Mas só é visível para conjuntos de dados maiores. Quanto menor for a matriz, mais insignificante será a lacuna.
Inspector é uma ferramenta de monitoramento de execução de código projetada especificamente para desenvolvedores de software. Você não precisa instalar nada no nível do servidor, basta instalar o pacote do compositor e você está pronto para começar.
Ao contrário de outras plataformas complexas e completas, o Inspector é super fácil e compatível com PHP. Você pode experimentar nosso pacote Laravel ou Symfony.
Se você procura automação eficaz, insights profundos e a capacidade de encaminhar alertas e notificações para seu ambiente de mensagens, experimente o Inspector gratuitamente. Registre sua conta.
Ou saiba mais no site: https://inspector.dev
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3