[PHP] Substituto para in_array com melhor performance
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?
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
Curtidas 0
Melhor post
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.
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
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.
Espero ter ajudado grande abraço.
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
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.
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
07/07/2017
Hugo,
Que bom afinal a preocupação com desempenho em uma aplicação é muito importante hoje em dia.
Grande Abraço
Que bom afinal a preocupação com desempenho em uma aplicação é muito importante hoje em dia.
Grande Abraço
GOSTEI 0