Является ли 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%. Спасибо Виккен!

Другие вопросы по тегам