fork(1) download
  1. <?php
  2.  
  3. $GLOBALS['cnt'] = 100000;
  4.  
  5. function foreachvalue($a){
  6. $c = 0;
  7. foreach($a as $v){ if($v=='xxxxx') ++$c; }
  8. }
  9.  
  10. function foreachreference(&$a){
  11. $c = 0;
  12. foreach($a as $v){ if($v=='xxxxx') ++$c; }
  13. }
  14.  
  15. function forvalue($a){
  16. $c = 0;
  17. for($i=0; $i<$GLOBALS['cnt']; ++$i)
  18. if($a[$i]=='xxxxx') ++$c;
  19. }
  20.  
  21. function forreference(&$a){
  22. $c = 0;
  23. for($i=0; $i<$GLOBALS['cnt']; ++$i)
  24. if($a[$i]=='xxxxx') ++$c;
  25. }
  26.  
  27. function forcountvalue($a){
  28. $c = 0;
  29. $c_a = count($a);
  30. for($i=0; $i<$c_a; ++$i)
  31. if($a[$i]=='xxxxx') ++$c;
  32. }
  33.  
  34. function forcountreference(&$a){
  35. $c = 0;
  36. $c_a = count($a);
  37. for($i=0; $i<$c_a; ++$i)
  38. if($a[$i]=='xxxxx') ++$c;
  39. }
  40.  
  41. function dovalue($a){
  42. $c = 1;
  43. $_cnt = 0;
  44. do {
  45. if($a[$i]=='xxxxx') ++$c;
  46. $_cnt++;
  47. } while ($_cnt < $GLOBALS['cnt']);
  48. }
  49.  
  50. function doreference(&$a){
  51. $c = 1;
  52. $_cnt = 0;
  53. do {
  54. if ($a[$i]=='xxxxx') ++$c;
  55. $_cnt++;
  56. } while ($_cnt < $GLOBALS['cnt']);
  57. }
  58.  
  59. function docountvalue($a){
  60. $c = 1;
  61. $_cnt = 0;
  62. $c_a = count($a);
  63. do {
  64. if($a[$i]=='xxxxx') ++$c;
  65. $_cnt++;
  66. } while ($_cnt < $c_a);
  67. }
  68.  
  69. function docountreference(&$a){
  70. $c = 1;
  71. $_cnt = 0;
  72. $c_a = count($a);
  73. do {
  74. if ($a[$i]=='xxxxx') ++$c;
  75. $_cnt++;
  76. } while ($_cnt < $c_a);
  77. }
  78.  
  79. $x = array_fill(0, $GLOBALS['cnt'], 'xxxxx');
  80.  
  81. $foreachbegin = microtime(true);
  82. foreachvalue($x);
  83. $foreachend1 = microtime(true);
  84. foreachreference($x);
  85. $foreachend2 = microtime(true);
  86.  
  87. echo "foreach value: " . ($foreachend1 - $foreachbegin) . "\n";
  88. echo "foreach reference: " . ($foreachend2 - $foreachend1) . "\n\n";
  89.  
  90. $forbegin = microtime(true);
  91. forvalue($x);
  92. $forend1 = microtime(true);
  93. forreference($x);
  94. $forend2 = microtime(true);
  95.  
  96. echo "for value: " . ($forend1 - $forbegin) . "\n";
  97. echo "for reference: " . ($forend2 - $forend1) . "\n\n";
  98.  
  99. $forcountbegin = microtime(true);
  100. forcountvalue($x);
  101. $forcountend1 = microtime(true);
  102. forcountreference($x);
  103. $forcountend2 = microtime(true);
  104.  
  105. echo "for count value: " . ($forcountend1 - $forcountbegin) . "\n";
  106. echo "for count reference: " . ($forcountend2 - $forcountend1) . "\n\n";
  107.  
  108. $dobegin = microtime(true);
  109. dovalue($x);
  110. $doend1 = microtime(true);
  111. doreference($x);
  112. $doend2 = microtime(true);
  113.  
  114. echo "do value: " . ($doend1 - $dobegin) . "\n";
  115. echo "do reference: " . ($doend2 - $doend1) . "\n\n";
  116.  
  117. $docountbegin = microtime(true);
  118. docountvalue($x);
  119. $docountend1 = microtime(true);
  120. docountreference($x);
  121. $docountend2 = microtime(true);
  122.  
  123. echo "do count value: " . ($docountend1 - $docountbegin) . "\n";
  124. echo "do count reference: " . ($docountend2 - $docountend1) . "\n";
  125.  
  126. ?>
Success #stdin #stdout 0.75s 13112KB
stdin
Standard input is empty
stdout
foreach value:       0.0459861755371
foreach reference:   0.0232529640198

for value:           0.0450010299683
for reference:       0.0402710437775

for count value:     0.0252850055695
for count reference: 0.042711019516

do value:            0.132611036301
do reference:        0.127890825272

do count value:      0.117486000061
do count reference:  0.130372047424