Является ли array_key() самым быстрым решением для этого?
Я пишу приложение для моего исследования, которое имеет дело с очень большими массивами и множеством итераций их значений. Чтобы сократить время вычислений, я реализую несколько улучшений в кодах. Сейчас, после нескольких улучшений, время расчета все еще немного велико. array_key()
функция, которая потребляет почти половину времени расчета. Есть ли лучшая замена этому?
Я создаю пример, который является простой версией (без итерационных циклов) того, что мне нужно улучшить:
$bigArray=array_fill(0,1000000,0);
for($i=0;$i<10;$i++){
$rnd=mt_rand(0,1000000);
$bigArray[$rnd]=1;
}
$start=microtime(true);
$list=array_keys($bigArray,1);
$end=microtime(true);
echo $end-$start;
Результат что-то вроде 0.021490097045898
секунд. Кто-нибудь знает более быстрый способ сделать это? Даже очень небольшое улучшение будет полезно, так как этот вид расчета будет идти за сотни тысяч раундов, а иногда время достигает 30 секунд, и половина из них для array_key()
функционировать как описано выше.
Кстати, я запускаю скрипт на двухъядерном (Intel) E8500 с частотой 3,16 ГГц,3,17 ГГц с 8 ГБ ОЗУ, операционная система Windows 7 64-разрядная (на всякий случай).
Заранее спасибо.
1 ответ
Кредит переходит к @Wikken из комментариев:
если на самом деле это просто 1 и 0, то array_filter() работает примерно в два раза быстрее, чем array_keys().
Это действительно полезно и выполняет работу быстро. В моем случае время сократилось на 20%. Спасибо Виккен!