Optimising while() loops in PHP

Is while() the same as for()?

Following the for() tests, I performed the same tests for while() loops. The speeds were very similar to the for() tests across the board, with just one syntax standing out: the one that doesn’t use a comparison operator. It was about 50% faster than all the others:

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

As with the for() test, this 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.25400330 seconds

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

Syntax B – 0.25518957 seconds

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

Syntax C – 0.26488042 seconds

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

Syntax D – 0.25089923 seconds

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

Syntax E – 0.25067065 seconds

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

Syntax F – 0.25501704 seconds

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

Syntax G – 0.16932660 seconds

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

The system

PHP 4.4.2 / Apache 2 / Windows XP / Pentium M 2.0GHz

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.25400330 0.25518957 0.26488042 0.25089923 0.25067065 0.25501704 0.16932660

Test times in seconds

1 0.25195217 0.25709486 0.26155615 0.24996591 0.24951696 0.25048590 0.17171693
2 0.25049901 0.25462508 0.26277900 0.24855900 0.25187016 0.25115085 0.16877103
3 0.25056195 0.25447106 0.26457620 0.24945092 0.24931312 0.25134802 0.16876197
4 0.24949098 0.25474882 0.28634906 0.25612903 0.24914503 0.25799084 0.17072916
5 0.24933600 0.25929093 0.25998211 0.24838996 0.25472093 0.25067496 0.16901398
6 0.25023198 0.25191498 0.25983405 0.25193501 0.24974394 0.25553179 0.16732407
7 0.25098395 0.25520802 0.26355600 0.27766800 0.24797583 0.25325990 0.16689992
8 0.25408602 0.25555086 0.26080704 0.24928379 0.24766612 0.25503802 0.16696882
9 0.25167680 0.25623703 0.25926805 0.25221300 0.24866104 0.25258017 0.16777301
10 0.24950981 0.25546002 0.26401997 0.25030208 0.24688888 0.25183201 0.16886210
11 0.27618599 0.26785302 0.26257396 0.25100994 0.24802995 0.25353289 0.16919994
12 0.24945593 0.25243306 0.26135898 0.25020504 0.25263095 0.25390196 0.16923404
13 0.24948716 0.25432897 0.26151395 0.24826503 0.24987602 0.25117707 0.17215991
14 0.25291491 0.25389194 0.26015592 0.24835110 0.24931097 0.28657508 0.16858792
15 0.25206494 0.25446796 0.26019502 0.24963999 0.25139689 0.25091290 0.16877198
16 0.25024199 0.25678706 0.26228404 0.25569320 0.24784803 0.25094509 0.16966391
17 0.25261092 0.25741887 0.26018500 0.25133085 0.24892592 0.25108099 0.17130494
18 0.24968505 0.25386882 0.28493285 0.25942206 0.25270796 0.25089502 0.16955400
19 0.25005007 0.25417900 0.25908518 0.25289106 0.24755406 0.25458694 0.16968012
20 0.24937606 0.25550509 0.26105618 0.24790692 0.24985504 0.25174189 0.17083502
21 0.25188708 0.25264502 0.26235199 0.24965906 0.25213504 0.25149012 0.16798496
22 0.28471303 0.25573397 0.26369214 0.24906015 0.24753904 0.25590992 0.16844988
23 0.25200319 0.25556111 0.27011299 0.24897480 0.24822903 0.25298810 0.17124486
24 0.24974394 0.25281000 0.26364994 0.25131297 0.24979997 0.25356388 0.16718698
25 0.26654911 0.26921892 0.26646304 0.24853015 0.25068283 0.25463605 0.16685319
26 0.25296903 0.25527382 0.26220012 0.24844384 0.24823093 0.25592303 0.17045188
27 0.24938297 0.25526190 0.26136899 0.25010419 0.24760318 0.25726914 0.16810799
28 0.25566387 0.25239992 0.26873207 0.25061488 0.24792004 0.29251790 0.16746283
29 0.25168490 0.25764704 0.26228881 0.24948096 0.24807000 0.25303507 0.16702294
30 0.25385499 0.25521421 0.26708913 0.24834394 0.25204110 0.25155306 0.16913700
31 0.25006413 0.25271702 0.26269007 0.25308013 0.24929094 0.25415707 0.16780901
32 0.25173402 0.25537801 0.29205394 0.25119901 0.25207996 0.25203609 0.16903496
33 0.25301003 0.25485206 0.26138401 0.24858499 0.24999905 0.25358009 0.17261195
34 0.24998307 0.25541401 0.25990796 0.25026989 0.25406909 0.25173283 0.16940594
35 0.25248885 0.25287509 0.26410508 0.24909711 0.24888897 0.25313497 0.16708493
36 0.28926301 0.25745201 0.26257706 0.24828315 0.24855399 0.25522208 0.16686606
37 0.25196195 0.25379491 0.26398015 0.25242114 0.24774385 0.25386000 0.16749096
38 0.25131011 0.25293112 0.26294208 0.25029683 0.25062799 0.25293398 0.16808891
39 0.25391793 0.25425911 0.26192093 0.24904823 0.28097510 0.25809503 0.16718817
40 0.25849795 0.25357914 0.26118112 0.25276494 0.25231981 0.25115490 0.17191315
41 0.25041103 0.25290108 0.26447392 0.24821520 0.24839902 0.25395298 0.16985512
42 0.25357795 0.25502896 0.26205802 0.24918604 0.26627493 0.27106500 0.16714311
43 0.25279999 0.25304699 0.26273704 0.25361300 0.24880505 0.25318599 0.16770506
44 0.24972510 0.25533319 0.26228809 0.25183797 0.24972796 0.25134301 0.16941714
45 0.25331593 0.25225592 0.26238799 0.24965501 0.25280094 0.25317597 0.16900301
46 0.25112104 0.25306416 0.29888105 0.24841213 0.25060296 0.25621915 0.16949201
47 0.24960995 0.25392389 0.26405406 0.24846411 0.24821210 0.25547719 0.16741395
48 0.25718308 0.25245905 0.26250100 0.24843383 0.24782896 0.25349617 0.17014909
49 0.25020289 0.25798416 0.26113582 0.25070405 0.24996996 0.25149608 0.19177508
50 0.26113296 0.25312710 0.26674390 0.24825811 0.25047302 0.25140500 0.16716695

Latest News & Insights

Say connected – get Loft updates straight to your inbox.