php/e23fibTiming.php

<html>
<h2><?php echo basename(__file__); ?> PHP redir stdout, achtung läuft nur in CLI!!!</h3>
<?php 
require_once('env.php');
outBegin();
$cEnd = 1e6;

function fFor() {
    global $cEnd, $cnt, $sum;
    for ($i=0; $i < $cEnd; $i++) {
        $cnt++;
        $sum += $i;
    }
}

function iFun($j) {
    global $cnt, $sum;
    $cnt++;
    $sum += $j;
}

function fFunction() {
    global $cEnd;
    for ($i=0; $i < $cEnd; $i++) 
        iFun($i);
}

function fVarFun() {
    global $cEnd;
    $ifu = 'iFun';
    for ($i=0; $i < $cEnd; $i++) 
        $ifu($i);
}

function iIt() {
    global $cEnd;
    for ($i=0; $i < $cEnd; $i++) 
        yield $i;
}

function fIterator() {
    global $cnt, $sum;
    foreach (iIt() as $i) {
        $cnt++;
        $sum += $i;
    }
}

function iFib() {
    global $cEnd;
    for ($i=0; $i < $cEnd; $i++) 
        Fiber::suspend($i);
}

function fFiber() {
    global $cnt, $sum;
    $fi = new Fiber('iFib');
    for($i = $fi->start(); $i !== null; $i = $fi->resume()) {    
        $cnt++;
        $sum += $i;
    }
}

class cObj {
public $null, $eins, $zwei, $drei, $vier, $fuenf, $sechs;
    public function __construct($n, $e, $z, $d, $v, $f, $s) {
    $this->null = $n;
    $this->eins = $e;
    $this->zwei = $z;
    $this->drei = $d;
    $this->vier = $v;
    $this->fuenf = $f;
    $this->sechs = $s;
    }
}

function fArrNN() {
    global $cEnd, $cnt;
    $cnt = $cEnd/10;   
    $a = [];
    for ($i=0; $i < $cnt; $i++) 
        $a[] = $i;
}

function fArrI() {
    global $cEnd, $cnt;
    $cnt = $cEnd/10;   
    $a = [];
    for ($i=0; $i < $cnt; $i++) 
        $a[] = ["null$i", "eins$i", "zwei$i", "drei$i", "vier$i", "fuenf$i", "sechs$i"];
}

function fArrS() {
    global $cEnd, $cnt;
    $cnt = $cEnd/10;   
    $a = [];
    for ($i=0; $i < $cnt; $i++) 
        $a[] = ["null" => "null$i", "eins" => "eins$i", "zwei" => "zwei$i", "drei" => "drei$i", "vier" => "vier$i", "fuenf" => "fuenf$i", "sechs" => "sechs$i"];
}

function fArrA() {
    global $cEnd, $cnt;
    $cnt = $cEnd/10;   
    $a = [];
    for ($i=0; $i < $cnt; $i++) {
        $e = [];
        $e["null"] = "null$i";
        $e["eins"] = "eins$i";
        $e["zwei"] = "zwei$i"; 
        $e["drei"] = "drei$i";
        $e["vier"] = "vier$i";
        $e["fuenf"] = "fuenf$i";
        $e["sechs"] = "sechs$i";
        $a[] = $e;
    }
}

function fObj() {
    global $cEnd, $cnt;
    $cnt = $cEnd/10;
    $a = [];  
    for ($i=0; $i < $cnt; $i++) 
        $a[] = new cObj("null$i", "eins$i", "zwei$i", "drei$i", "vier$i", "fuenf$i", "sechs$i");
}

function fObjA() {
    global $cEnd, $cnt;
    $cnt = $cEnd/10;   
    $a = [];
    for ($i=0; $i < $cnt; $i++) {
        $e = new stdClass();
        $e->null = "null$i";
        $e->eins = "eins$i";
        $e->zwei = "zwei$i"; 
        $e->drei = "drei$i";
        $e->vier= "vier$i";
        $e->fuenf = "fuenf$i";
        $e->sechs = "sechs$i";
        $a[] = $e;
    }
}

function fXpld0() {
    global $cEnd, $cnt, $sum;
    for ($i=0; $i < $cEnd; $i++) {
        $s = "ein$i zwei   drei vier  fünf sechs sieben";
        $cnt++; 
        $sum += strlen($s);
    }
}

function fXpldArr() {
    global $cEnd, $cnt, $sum;
    for ($i=0; $i < $cEnd; $i++) {
        $s = ["ein$i", 'zwei', 'drei', 'vier', 'fünf', 'sechs', 'sieben'];
        $cnt++; 
        foreach ($s as $e)
            $sum += 1;
    }
}


function fXpld() {
    global $cEnd, $cnt, $sum;
    for ($i=0; $i < $cEnd; $i++) {
        $s = "ein$i zwei   drei vier  fünf sechs sieben";
        $cnt++; 
        foreach (explode(' ', $s) as $t) {
            if (! $t)
                continue;
            $sum += 1;
        }
    }
}

function fXpldPreg() {
    global $cEnd, $cnt, $sum;
    for ($i=0; $i < $cEnd; $i++) {
        $s = "ein$i zwei   drei vier  fünf sechs sieben";
        $cnt++; 
        foreach (preg_split('/\s+/', $s, flags: PREG_SPLIT_NO_EMPTY) as $t) {
            $sum += 1;
        }
    }
}

function fXpldFor() {
    global $cEnd, $cnt, $sum;
    for ($i=0; $i < $cEnd; $i++) {
        $s = "ein$i zwei   drei vier  fünf sechs sieben";
        $cnt++; 
        for ($ky=0; $ky !== false and (($k = substr($s, $kx=$ky+1, (false === $ky=strpos($s, ' ', $kx)) ? null: $ky-$kx)) or true);) { 
            if (! $k)
                continue;
            $sum += 1;
        }
    }
}

function fXpldForSpn() {
    global $cEnd, $cnt, $sum;
    for ($i=0; $i < $cEnd; $i++) {
        $s = "ein$i zwei   drei vier  fünf sechs sieben";
        $cnt++; 
        for ($ky=0; $ky !== false and $k = substr($s, $kx=$ky+strspn($s, ' ', $ky), (false === $ky=strpos($s, ' ', $kx)) ? null: $ky-$kx);) { 
            $sum += 1;
        }
    }
}


outTb();
outTCF('l', 'r');
outTRH('fun', 'cnt', 'sum', 'ticks', 'utime', 'stime', 'ti/cnt ns');
#foreach(['fFor', 'fFunction', 'fVarFun', 'fIterator', 'fFiber', 'fArrNN', 'fArrI', 'fArrS', 'fArrA', 'fObj', 'fObjA', 'fArrI'] as $do){
for ($l=0; $l <3; $l++)
foreach(['fXpld0', 'fXpldArr', 'fXpld', 'fXpldPreg', 'fXpldFor', 'fXpldForSpn'] as $do) {
    $cnt = $sum = 0;
    $tB = posix_times();
    $do();
    $tA = posix_times();
    outTRD($do, $cnt, $sum
            , sprintf('%5.2f', ($ti=$tA['ticks'] - $tB['ticks'])/100), sprintf('%5.2f', ($tu=$tA['utime'] - $tB['utime'])/100)
            , sprintf('%5.2f', ($tA['stime'] - $tB['stime'])/100), $ti*1e9/$cnt);
}
outEnd(__file__);
?>