kostenloser Webspace werbefrei: lima-city


Text beliebig häufig

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    a**e

    ...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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. benutzernaemelchen

    Kostenloser Webspace von benutzernaemelchen

    benutzernaemelchen hat kostenlosen Webspace.

    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;
    
    ?>
  4. 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
  5. 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
  6. Autor dieses Themas

    a**e

    thx.
    str_repeat() - das war genau das, was ich suchte.

    Auf das Board bei Lima ist immer verlass!
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!