[PHP] Substituto para in_array com melhor performance

PHP

07/07/2017

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

Curtidas 0

Melhor post

Estevão Dias

Estevão Dias

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.
GOSTEI 1

Mais Respostas

Fabio Rocha

Fabio Rocha

07/07/2017

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.
GOSTEI 1
Victor Machado

Victor Machado

07/07/2017

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.
GOSTEI 0
Fabio Rocha

Fabio Rocha

07/07/2017

Hugo,

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

Grande Abraço
GOSTEI 0
POSTAR