Optimising for() loops in PHP

Unexpected result shows 50% speed gain

I decided to try a couple of speed tests on for loops in PHP. The results were suprising. The speeds were almost exactly the same, with the exception of one syntax which was about 50% faster than the others, yet is possibly the least used. This is:

for($i=1000000; $i; $i--){}

It is a count-down loop, which checks the boolean value of $i without a comparison operator for each iteration.

The syntaxes

Here are all the syntaxes, in order of testing, together with their average run times over 50 tests. The fastest was syntax G, the last syntax.

Syntax A – 0.25367754 seconds

for($i=0; $i<1000000; $i++){}

Syntax B – 0.25415988 seconds

for($i=0; $i<=999999; $i++){}

Syntax C – 0.25957097 seconds

for($i=0; $i!=1000000; $i++){}

Syntax D – 0.25594527 seconds

for($i=1000000; $i>0; $i--){}

Syntax E – 0.25266805 seconds

for($i=1000000; $i>=1; $i--){}

Syntax F – 0.25876847 seconds

for($i=1000000; $i!=0; $i--){}

Syntax G – 0.17032199 seconds

for($i=1000000; $i; $i--){}

The results

Here is the table of results for each syntax, with the syntaxes across the top and the test numbers down the left. The fastest syntax is in the far right column.

						Syntax
A B C D E F G

Average time in seconds

0.25367754 0.25415988 0.25957097 0.25594527 0.25266805 0.25876847 0.17032199

Test times in seconds

1 0.25125408 0.24980593 0.26045203 0.25395894 0.25166392 0.25781393 0.17040396
2 0.25146794 0.25000310 0.26537013 0.25404811 0.25013685 0.26154613 0.16735697
3 0.25124502 0.25376511 0.26032496 0.25281906 0.25060391 0.25592184 0.16689515
4 0.25314903 0.25172687 0.25967193 0.25479698 0.24923086 0.27749991 0.18362093
5 0.25096893 0.24984694 0.25809693 0.25519991 0.25201392 0.25828409 0.16676307
6 0.25186682 0.25044012 0.25816298 0.25410509 0.25239611 0.25691700 0.16851497
7 0.25160289 0.25336790 0.25718093 0.25461221 0.24952102 0.26408100 0.19665909
8 0.25180602 0.24947190 0.25674891 0.25496507 0.25569391 0.25660896 0.16706204
9 0.25344300 0.25165200 0.25636888 0.25630403 0.24988008 0.25773096 0.16626596
10 0.25010586 0.25814509 0.25746417 0.25428104 0.24895692 0.25528002 0.17097282
11 0.24978900 0.24981689 0.26134205 0.28772306 0.25307894 0.25544000 0.16850019
12 0.25181293 0.25371385 0.25880289 0.25667596 0.24990106 0.25779915 0.16769099
13 0.25326300 0.25220108 0.25658298 0.25256705 0.25374484 0.25823903 0.16859889
14 0.25596499 0.25334597 0.25650001 0.25861597 0.25187707 0.25797296 0.16889000
15 0.26246095 0.27350187 0.25853395 0.25448704 0.24947286 0.25533009 0.16802716
16 0.25421000 0.25460720 0.25637507 0.25310993 0.25122499 0.25791311 0.16824698
17 0.24998689 0.25490808 0.25682116 0.25385189 0.25308990 0.25567913 0.16874099
18 0.25007701 0.25054502 0.26270819 0.25274706 0.24973416 0.25757813 0.18450499
19 0.27156210 0.24988699 0.25764108 0.25487089 0.25214410 0.25751591 0.16807199
20 0.25045681 0.25012803 0.26254797 0.25233722 0.25329614 0.25930595 0.16835713
21 0.25024605 0.25008297 0.26017308 0.25296903 0.25095391 0.25574279 0.17060089
22 0.28859401 0.25162315 0.25651884 0.25248599 0.25210500 0.25766706 0.16809297
23 0.25231695 0.25259495 0.25729299 0.25275302 0.25345612 0.25584292 0.16833806
24 0.24992800 0.25217319 0.26206994 0.25205207 0.24932718 0.25752401 0.17070317
25 0.25042295 0.25389600 0.25720692 0.25612903 0.28219891 0.26321912 0.16866016
26 0.24992704 0.26049185 0.25918102 0.25457788 0.25952101 0.26055884 0.16920400
27 0.25018501 0.25165200 0.25920892 0.25973201 0.24913216 0.26194096 0.16786790
28 0.25382400 0.25037098 0.25642610 0.25510812 0.24963093 0.25757694 0.17143488
29 0.25267601 0.27819204 0.26395297 0.25298190 0.25450110 0.25600004 0.16841698
30 0.25297809 0.25091815 0.26081705 0.25301099 0.24973488 0.25850797 0.16748691
31 0.25236487 0.25288606 0.26226807 0.25286102 0.25042796 0.25858092 0.16868210
32 0.25532222 0.25157285 0.25957298 0.25583100 0.25437903 0.26776600 0.18927193
33 0.25004792 0.25306511 0.25628400 0.25494504 0.25450206 0.25656295 0.16832399
34 0.25057817 0.25425792 0.25689292 0.25265288 0.25199699 0.25901604 0.16903806
35 0.25388694 0.25039601 0.25910115 0.25315905 0.25356793 0.25609398 0.17118192
36 0.25122809 0.28554583 0.25814390 0.25676894 0.25092292 0.25622010 0.16881204
37 0.25088811 0.25574088 0.25854611 0.25886011 0.25200701 0.25628304 0.17367506
38 0.25162792 0.25230908 0.25989890 0.25544214 0.24930596 0.25788999 0.16872501
39 0.25084710 0.25187922 0.25736904 0.29197478 0.25038195 0.25541902 0.16898108
40 0.25033212 0.25489092 0.25712109 0.25484514 0.25268888 0.25815606 0.16776109
41 0.25281191 0.25241804 0.25724697 0.25442505 0.24988103 0.26069188 0.17043805
42 0.25051808 0.25171995 0.25711012 0.25709295 0.25001001 0.25634289 0.16878891
43 0.27871513 0.26115704 0.25886607 0.25318193 0.25012112 0.26223683 0.16924810
44 0.25219607 0.25281286 0.25926113 0.25274897 0.25223303 0.25709605 0.16756320
45 0.25226498 0.24990296 0.26166415 0.25581002 0.24986696 0.25776601 0.16638088
46 0.25237012 0.25259209 0.25887895 0.25560403 0.27116704 0.27120495 0.16840100
47 0.25255895 0.25101709 0.25885701 0.25278187 0.25401878 0.25865388 0.16899800
48 0.25013804 0.25047994 0.25889802 0.25674295 0.25152183 0.25638080 0.17122507
49 0.25126696 0.25999999 0.25954795 0.25280190 0.25664210 0.25627899 0.16896892
50 0.25632215 0.25047493 0.29247499 0.25485706 0.24953699 0.26074505 0.16668487

Latest News & Insights

Say connected – get Loft updates straight to your inbox.