Fórum [PHP] Substituto para in_array com melhor performance #583414

07/07/2017

0

PHP

Olá pessoal.

Existe algum substituto para a função in_array() do php com uma performance melhor?

No meu código eu preciso fazer algumas verificações e estou sentindo uma queda de desempenho.

Alguém conhece?
Victor Machado

Victor Machado

Responder

Post mais votado

10/07/2017

Olá Hugo, tudo bem?

Depende muito do contexto aplicado. Se você estiver localizando uma palavra em uma frase strpos tende a ter melhor performance. Mas, se a ideia é localizar o valor em um array, há casos nos quais uma estrutura de repetição pode se sair melhor com isset. Então, em lugar de fazer in_array() você pode verificar pela chave com isset().

Seria bacana você compartilhar o código que deseja otimizar, mas se você não puder, eu começaria com um teste utilizando microtime e memory_get_peak_usage. Assim você poderia comparar tempo/memória utilizada em cada um dos casos, in_array e isset, comprovando qual algoritmo se adéqua melhor as suas necessidades.

Um abraço.

Estevão Dias

Estevão Dias
Responder

Gostei + 1

Mais Posts

11/07/2017

Fabio Rocha

Hugo tudo bem,

Conforme Estevao falou tudo depende do caso, mas acho que isset é bem mais rápido, rode este exemplo para você ter esta noção.

$a = array();
for ($i = 0; $i < 100000; ++$i) {
    $v = rand(1, 1000000);
    $a[$v] = $v;
}
echo "Tamanho: ", count($a), PHP_EOL;

$inicio = microtime( true );

for ($i = 0; $i < 10000; ++$i) {
    isset($a[rand(1, 1000000)]);
}

$totalTempo = microtime( true ) - $inicio;
echo "Total tempo isset: ", number_format($totalTempo, 6), PHP_EOL;

$inicio = microtime( true );

for ($i = 0; $i < 10000; ++$i) {
    in_array(rand(1, 1000000), $a);
}

$totalTempo = microtime( true ) - $inicio;
echo "Total tempo in_array: ", number_format($totalTempo, 6), PHP_EOL;


Espero ter ajudado grande abraço.
Responder

Gostei + 1

12/07/2017

Victor Machado

Obrigado pelas resposta Estevão e Fabiorocha.

Estevão, no meu caso eu estava fazendo um loop por uma grande quantidade de itens e estava filtrando o resultado verificando se o nome estava em algumas das lista de exclusão, alerta e etc.

Mas com a dicas de vocês consegui melhorar o desempenho.
Responder

Gostei + 0

13/07/2017

Fabio Rocha

Hugo,

Que bom afinal a preocupação com desempenho em uma aplicação é muito importante hoje em dia.

Grande Abraço
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar