Thoralf: Problem mit 2 verschachtelten Schleifen

Hallo Forum,

ich paste erstmal des Script und dann sach ich was ich eigentlich möchte ;)

<?php
 $durchlauf = 150;

for ($i=0; $i < $durchlauf; $i++)
 {
  srand ((double)microtime()*1000000);
  $anzahl = rand(1,10);
  for ($j=0; $j < $anzahl; $j++)
  {
   srand ((double)microtime()*1000000);
   $icon = rand(1,32);
   $icons[$j] = $icon;
  }
 }
 $icons = array_unique ($icons);
 natsort ($icons);
 print_r($icons);
?>

Das Script soll mir 150 Arrays ausgeben wo die Anzahl der Elemente durch Zufall bestimmt und zwischen 1-10 liegen soll. Die Elemente sollen wiederum aus Zufallszahlen bestehen welche Werte von 1-32 annehmen sollen.
Mein Problem liegt jetzt einfach darin das die ganze schleife nur einmal durchlaufen wird und die Anzahl der Arrays ständig 10 beträgt.
Die Werte der Elemente passen aber.

Vielen Dank schon mal im voraus

cu Thoralf

  1. Hi,

    for ($i=0; $i < $durchlauf; $i++)
    {
      srand ((double)microtime()*1000000);

    Warum willst Du das 150 Mal machen?
    Einmal (vor der Schleife) reicht.
    Dadurch kann es passieren, daß Du immer wieder die gleiche "Zufallszahl" bekommst.

    $anzahl = rand(1,10);
      for ($j=0; $j < $anzahl; $j++)
      {
       srand ((double)microtime()*1000000);

    ist hier genauso überflüssig.

    $icon = rand(1,32);
       $icons[$j] = $icon;
      }
    }
    $icons = array_unique ($icons);

    siehe oben, wenn Du immer wieder die selbe Zufallszahl bekommst, schmeißt Du hier alle Duplikate weg ==> ein einziger Eintrag.

    natsort ($icons);
    print_r($icons);
    ?>

    Das Script soll mir 150 Arrays ausgeben wo die Anzahl der Elemente durch Zufall bestimmt und zwischen 1-10 liegen soll. Die Elemente sollen wiederum aus Zufallszahlen bestehen welche Werte von 1-32 annehmen sollen.
    Mein Problem liegt jetzt einfach darin das die ganze schleife nur einmal durchlaufen wird

    Woraus schließt Du das? Weil Du die Duplikate wegschmeißt?

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. Hi,

      Warum willst Du das 150 Mal machen?
      Einmal (vor der Schleife) reicht.
      Dadurch kann es passieren, daß Du immer wieder die gleiche "Zufallszahl" bekommst.

      Hm es hatte bisher geklappt, habs aber trotzdem geändert :)

      $icons = array_unique ($icons);

      siehe oben, wenn Du immer wieder die selbe Zufallszahl bekommst, schmeißt Du hier alle Duplikate weg ==> ein einziger Eintrag.

      Da ich bisher keine Duplikate hatte war diese Function zwar überflüssig, ich hab sie aber zur Sicherheit eingebaut.

      Mein Problem liegt jetzt einfach darin das die ganze schleife nur einmal durchlaufen wird

      Woraus schließt Du das? Weil Du die Duplikate wegschmeißt?

      Nein weil die function zur Ausgabe an der falschen Stelle war ;).
      Das Printen des Arrays muss ja zwangsläufig innerhalb der ersten Schleife erfolgen da ja sonst das Array ständig überschrieben wird und demzufolge nachher bei der Ausgabe nur ein Array existiert.
      Dadurch ergibt sich aber das Problem das beim nächsten durchlauf der ersten Schleife das schon ausgegebene Array immer wieder überschrieben wird und die Anzahl der Elemente sich selber hochzählen. Dadurch hab ich schon Ziemlich am Anfang, nämlich dann wenn zum ersten mal die Zahl 10 bei der Anzahl auftaucht, ständig 10 Elemente.
      Lange Rede Kurzer Sinn, das script funktioniert jetzt.
      Hier nochmal das "richtige" Script.

      <?php
       $durchlauf = 150;
       srand ((double)microtime()*1000000);

      for ($i=0; $i < $durchlauf; $i++)
       {
        $anzahl = rand(1,10);
        for ($j=0; $j < $anzahl; $j++)
        {
         $icon = rand(1,32);
         $icons[$j] = $icon;
        }
        $icons = array_unique ($icons);
        natsort ($icons);
        $print = print_R($icons)."<br>\n";
        unset($icons);
        echo $print;
       }
      ?>

      Ob das jetzt wirklich so richtig ist, weis ich nich. Auf jeden fall tuts jetzt genau das was ich will ;))

      MfG Thoralf