<?php

$GLOBALS['cnt'] = 100000;

function foreachvalue($a){
  $c = 0;
  foreach($a as $v){ if($v=='xxxxx') ++$c; }
}

function foreachreference(&$a){
  $c = 0;
  foreach($a as $v){ if($v=='xxxxx') ++$c; }
}

function forvalue($a){
  $c = 0;
  for($i=0; $i<$GLOBALS['cnt']; ++$i)
    if($a[$i]=='xxxxx') ++$c;
}

function forreference(&$a){
  $c = 0;
  for($i=0; $i<$GLOBALS['cnt']; ++$i)
    if($a[$i]=='xxxxx') ++$c;
}

function forcountvalue($a){
  $c = 0;
  $c_a = count($a);
  for($i=0; $i<$c_a; ++$i)
    if($a[$i]=='xxxxx') ++$c;
}

function forcountreference(&$a){
  $c = 0;
  $c_a = count($a);
  for($i=0; $i<$c_a; ++$i)
    if($a[$i]=='xxxxx') ++$c;
}

function dovalue($a){
  $c = 1;
  $_cnt = 0;
  do {
    if($a[$i]=='xxxxx') ++$c;
    $_cnt++;
  } while ($_cnt < $GLOBALS['cnt']);
}

function doreference(&$a){
  $c = 1;
  $_cnt = 0;
  do {
    if ($a[$i]=='xxxxx') ++$c;
    $_cnt++;
  } while ($_cnt < $GLOBALS['cnt']);
}

function docountvalue($a){
  $c = 1;
  $_cnt = 0;
  $c_a = count($a);
  do {
    if($a[$i]=='xxxxx') ++$c;
    $_cnt++;
  } while ($_cnt < $c_a);
}

function docountreference(&$a){
  $c = 1;
  $_cnt = 0;
  $c_a = count($a);
  do {
    if ($a[$i]=='xxxxx') ++$c;
    $_cnt++;
  } while ($_cnt < $c_a);
}

$x = array_fill(0, $GLOBALS['cnt'], 'xxxxx');

$foreachbegin = microtime(true);
foreachvalue($x);
$foreachend1 = microtime(true);
foreachreference($x);
$foreachend2 = microtime(true);

echo "foreach value:       " . ($foreachend1 - $foreachbegin) . "\n";
echo "foreach reference:   " . ($foreachend2 - $foreachend1) . "\n\n";

$forbegin = microtime(true);
forvalue($x);
$forend1 = microtime(true);
forreference($x);
$forend2 = microtime(true);

echo "for value:           " . ($forend1 - $forbegin) . "\n";
echo "for reference:       " . ($forend2 - $forend1) . "\n\n";

$forcountbegin = microtime(true);
forcountvalue($x);
$forcountend1 = microtime(true);
forcountreference($x);
$forcountend2 = microtime(true);

echo "for count value:     " . ($forcountend1 - $forcountbegin) . "\n";
echo "for count reference: " . ($forcountend2 - $forcountend1) . "\n\n";

$dobegin = microtime(true);
dovalue($x);
$doend1 = microtime(true);
doreference($x);
$doend2 = microtime(true);

echo "do value:            " . ($doend1 - $dobegin) . "\n";
echo "do reference:        " . ($doend2 - $doend1) . "\n\n";

$docountbegin = microtime(true);
docountvalue($x);
$docountend1 = microtime(true);
docountreference($x);
$docountend2 = microtime(true);

echo "do count value:      " . ($docountend1 - $docountbegin) . "\n";
echo "do count reference:  " . ($docountend2 - $docountend1) . "\n";

?>