Text beliebig häufig
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
arve
ausgabe
beitrag
board
durchschneiden
effekt
elemente
fight
funktion
gedacht
interne funktion
manual
messung
parameter
schleifen
sen
variable
verla
vorteil
zeitlich gesehen
-
...in eine Variable schreiben
Um einen Text o.?. beliebig h?ufig in eine Variable zu schreiben w?rde ich den folgenden Code schreiben.
$k = 5; $string = ''; for($x=0;$x<$k;$x++) { $string .= ' hallo '; } # Ausgabe: hallo hallo hallo hallo hallo
2. M?glichkeit: die While-Schleife
$k = 5; $string = ''; $x = 0; while($x<$k) { $string .= ' hallo '; $x++; } # Ausgabe: hallo hallo hallo hallo hallo
Die Frage ist nun, ob das noch schneller geht als mit einer "for"-Schleife oder einer "while"-Schleife bzw. welche anderen M?glichkeiten man noch hat.
Beitrag ge?ndert am 14.06.2006 11:50 von arve -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich hab mal das hier gemacht:
http://benutzernaemelchen.pyrokar.lima-city.de/fight.php
Dabei wird der Code verwendet, den du benutzt.
Die while scheint schneller zu sein...h?tte ich jetzt eher nicht gedacht...
vllt. hab ich auch was falsches zusammengebastelt^^:
<?php if(extension_loaded("zlib") && strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))ob_start("ob_gzhandler"); error_reporting(2047); ini_set("display_errors",1); echo 'For-schleife:<br />'; //1. M?glichkeit(for-schleife) $time1 = microtime(); $string = ''; for($i=0;$i<5;$i++) { $string .= ' hallo'; } $time2 = microtime(); echo 'Ben?tigte Zeit: '.(round(($time2-$time1),10)).'<br> Ausgegebener String:'.$string; echo '<br /> <br /> <br /> <br /> <br /> While-schleife:<br />'; $time11 = microtime(); $string2 = ''; $k = 5; $x = 0; while($x<$k) { $string2 .= ' hallo'; $x++; } $time22 = microtime(); echo 'Ben?tigte Zeit: '.(round(($time22-$time11),10)).'<br> Ausgegebener String:'.$string2; ?>
-
Hi,
PHP hat daf?r sogar eine vordefinierte funktion:
str_repeat() (http://php.net/manual/en/function.str-repeat.php)
Beispiel:
$str = "hallo "; echo str_repeat($str,5); // 5 mal den String $str wiederholen und anzeigen // zeigt "hallo hallo hallo hallo hallo " an
Da es eine interne Funktion ist, ist dies die Schnellste l?sung (Zeitlich gesehen ;)).
Eigentlich gibt es noch eine weitere m?glichkeit, die auch sehr praktisch ist (mit array_fill() [http://php.net/manual/en/function.array-fill.php]):
$str = "hallo"; $a = array_fill(0,5,$str); // erzeugt einen Array mit 5 Elementen (Schl?ssel 0 - 4), jeweils mit dem Wert $str echo implode(" ",$a); // Zeigt "hallo hallo hallo hallo hallo" an
Der Vorteil dabei ist, dass am Ende des ausgegebenen Strings kein leerzeichen vorkommt. Dieses Problem k?nnte man zwar bei str_repeat() mit trim() l?sen.
mfg,
hr -
Hi,
Sorry wegen dem Doppelpost, aber ich habe noch etwas interessantes entdeckt.
@benutzernaemelchen:
Ich habe da noch eine bessere Idee, um die exacte Durchschnittsgeschwindigkeit der beiden Scleifen zu testen:
// Der Effekt der funktion von PHP 5, // wenn der erste Parameter von microtime() true ist. function microtime_float() { $microtime = explode(" ",microtime()); return ((float)$microtime[0] + (float)$microtime[1]); } $messungen = 10000; $string = 'hallo'; // for-Schleife testen $t = array(); for ($i = 0; $i < $messungen; $i++) { $start = microtime_float(); $foo = ''; for($j = 0; $j < 5; $j++) { $foo .= $string; } $t[] = microtime_float() - $start; } $durchschnitt = number_format(array_sum($t) / $messungen,12); echo "<p>For-Schleife: $durchschnitt sek</p>"; // while-Schleife testen $t = array(); for ($i = 0; $i < $messungen; $i++) { $start = microtime_float(); $foo = ''; $j = 0; while($j < 5) { $foo .= $string; $j++; } $t[] = microtime_float() - $start; } $durchschnitt = number_format(array_sum($t) / $messungen,12); echo "<p>While-schleife: $durchschnitt sek</p>";
Ausgabe:
For-Schleife: 0.000014504862 sek
While-schleife: 0.000014789963 sek
... sieht so aus als for schneller ist als while, aber wirklich minimal.
mfg,
hr
Beitrag ge?ndert am 14.06.2006 15:44 von heavyraptor -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage