Jeena Paradies: Letztes Element löschen und vorne neuen anhängen

Beitrag lesen

Hallo,

So, und jetzt zum Schluss wiederlege ich alles was ich gesagt habe, denn die Array funktionen sind um ein vielfaches schneller wenn man es mal misst:

while:    3.4940791130066
string:   4.9904410839081
array:    1.2572290897369

Warum das so ist, da kann ich nur spekulieren, aber explode() und implode() werden wohl sehr viel Optimierung erfahren haben weil sie so oft genau dafür benutzt werden und man das intern in C viel schneller lösen kann als ich es hier mit meinem index-zugriff und einer while()-Schleife.

Warum strrpos() so langsam ist weiß ich allerdings nicht, das ist ja sogar langsamer als meine while()-Schleife mit index-zugriff.

Hier der Code den ich zum Messen benutzt habe:

<?php  
$array = array();  
  
for ($i=0; $i < 10000; $i++) {  
    array_push($array, rand(0, 1000));  
}  
  
$string = implode(";", $array);  
$times = 1000000;  
  
  
$start = microtime(true);  
for ($i=0; $i < $times; $i++) {  
    $semicolon_position = strlen($string);  
    while($semicolon_position > 0 && $string[--$semicolon_position] != ";") {}  
    $new_string = substr($string, 0, $semicolon_position);  
}  
echo "while:    " . (microtime(true) - $start) . "\n";  
  
  
$start = microtime(true);  
for ($i=0; $i < $times; $i++) {  
    $new_string = "0;" . substr($string, 0, strrpos($string, ";"));  
}  
echo "string:   " . (microtime(true) - $start) . "\n";  
  
  
$start = microtime(true);  
for ($i=0; $i < $times; $i++) {  
    $arr = explode($string, ";");  
    array_pop($arr);  
    array_unshift($arr, "0");  
    $new_string = implode(";", $arr);  
}  
echo "array:    " . (microtime(true) - $start) . "\n";  

/Jeena