"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como pesquisar em um array associativo PHP – dicas rápidas

Como pesquisar em um array associativo PHP – dicas rápidas

Publicado em 2024-11-07
Navegar:117

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.

Procurando uma chave em uma matriz associativa

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.";
}

Pesquisando por valor em uma matriz associativa

Usando array_search() e in_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"

Usando um loop foreach

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.
    }
}

Usando array_filter()

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);

Benchmarks de desempenho entre funções de array PHP e foreach

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%.

How to Search in a PHP Associative Array – Fast tips

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.

Novo no Inspetor? Monitore seu aplicativo gratuitamente

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

How to Search in a PHP Associative Array – Fast tips

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/inspector/how-to-search-in-a-php-associative-array-fast-tips-26o6?1 Se houver alguma violação, entre em contato com study_golang@163 .com para excluí-lo
Tutorial mais recente Mais>

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