Статьи,обзоры,справочники по PHP


Циклы: for, foreach, while, count/sizeof() - ускорение %-% - часть 3


Если кол-во элементов в массиве меньше 65000 (64К), то эти функции по скорости практически не различимы. Тут вывод простой - переходим на использование sizeof(), как ускоренного алиаса count(). Это принесет свои результаты на огромных массивах.

Ассоциативные массивы: тестирование разных способов перебора

С ними наблюдается таже проблема: на разных по величине массивах разные функции эффективны, но лучше всех foreach!

Массив в 200 элементов и 1000 повторов программы:

  1. {$x=0; foreach($test as $k=>$v) { $x=sprintf("%s=>%s\n",$k,$v);                                                           }}
  2. {$x=0; reset($test); while (list($k, $v) = each($test)) { $x=sprintf("%s=>%s\n",$k,$v);                                   }}
  3. {$x=0; $k=array_keys($test); $co=sizeof($k); for ($it=0; $it<$co; $it++) { $x=sprintf("%s=>%s\n",$k[$it],$test[$k[$it]]); }}
  4. {$x=0; reset($test); while ($k=key($test)) { $x=sprintf("%s=>%s\n",$k,current($test)); next($test);                       }}

счетчик кол-во
вызовов
общее
вpемя
сpеднее
вpемя
% от min% от maxобщее
время
test N118.12228.122200.0%78.7%


test N2110.322110.322127.1%100.0%


test N319.79219.792120.6%94.9%


test N418.97118.971110.5%86.9%


Тоже самое, но массив в 5000 элементов и 200 повторов:




- Начало -  - Назад -  - Вперед -