Henning: Arrays mit Werten füllen

Hallo,

<snip>
$fragen=array(0,0,0,0,0,0,0,0,0,0,0,0);

for ($i=1;$i<=10;$i++) {
  $fragegefunden=false;
  while (!$fragenummer) {
    $fragenummer=rand(1,$max);
    if (!in_array($fragenummer,$fragen)) {
      $fragen[$i]=$fragenummer;
      $fragegefunden=true;
    }
  }
}
</snip>

In dem Codeschnipsel soll ein Array (fragen) mit 10 unterschiedlichen Zahlen gefüllt werden. Doch das Array bleibt leer. Ich habe mir das Array mit echo ausgeben lassen. Alles leer. Kann ich die Werte so überhaupt zuweisen oder muss ich den => Operator verwenden. max ist in diesem Fall übrigens 15.

Gruß,
Henning

--
Gruß aus Braunschweig
  1. Hallo!

    In dem Codeschnipsel soll ein Array (fragen) mit 10 unterschiedlichen Zahlen gefüllt werden. Doch das Array bleibt leer. Ich habe mir das Array mit echo ausgeben lassen. Alles leer.

    Mit Echo kanst Du nur Strings ausgeben. Versuche mal var_dump($fragen).

    Kann ich die Werte so überhaupt zuweisen oder muss ich den => Operator verwenden. max ist in diesem Fall übrigens 15.

    Kannst Du. Aber ich würde es anders machen:

    <?php
    $zahlen = range ( 1, 15);
    srand ((float) microtime() * 10000000);
    $fragen  = array_rand ($zahlen, 10);
    print_r($fragen);
    ?>

    Grüße
    Andreas

    1. Hallo,

      <?php
      $zahlen = range ( 1, 15);
      srand ((float) microtime() * 10000000);
      $fragen  = array_rand ($zahlen, 10);
      print_r($fragen);
      ?>

      Danke, array_rand kannte ich noch gar nicht. Aber garantiert das auch das alle zahlen unterschiedlich sind?

      Gruß,
      Henning

      --
      Gruß aus Braunschweig
      1. Hi!

        Danke, array_rand kannte ich noch gar nicht. Aber garantiert das auch das alle zahlen unterschiedlich sind?

        Ja. Aber probiers aus, und dann gibts noch http://www.php3.de/manual/de/function.array-rand.php

        Grüße
        Andreas

        1. Hallo!

          Noch ein paar Varianten:

          <?php
          echo "<pre>";

          $max = 15;

          $zahlen = range ( 1, $max);
          srand ((float) microtime() * 10000000);
          $fragen  = array_rand ($zahlen, 10);
          print_r($fragen);

          mt_srand((double)microtime()*1000000);
          $fragen2=array();
          while(count($fragen2)<10){
              $randval = mt_rand( 1, $max);
              if(!in_array($randval, $fragen2)) {
                  $fragen2[]=$randval;
              }
          }
          print_r($fragen2);

          srand((double)microtime()*1000000);
          $zahlen = range ( 1, $max);
          $fragen3=array();
          while(count($fragen3)<10){
              $randval = array_rand ($zahlen);
              unset($zahlen[$randval]);
              $fragen3[]=$randval;
          }
          print_r($fragen3);

          ?>

          ;-)

          Grüße
          Andreas

          1. Hallo,

            Ich habe erstmal das hier ausprobiert. Merkwürdigerweise gibt es da manchmal eine 0 im Array?
            range(1,15) sollte doch nur die Zahlen 1 bis 15 beinhalten?

            $zahlen = range ( 1, $max);
            srand ((float) microtime() * 10000000);
            $fragen  = array_rand ($zahlen, 10);
            print_r($fragen);

            Gruß,
            Henning

            --
            Gruß aus Braunschweig
            1. Hi!

              Ich habe erstmal das hier ausprobiert. Merkwürdigerweise gibt es da manchmal eine 0 im Array?
              range(1,15) sollte doch nur die Zahlen 1 bis 15 beinhalten?

              Ups, array_rand gibt nur die keys zurück, naja, dann könnte man bei 0 anfangen und das erste Element löschen, also

              statt

              $zahlen = range ( 1, $max);

              sowas:

              $zahlen = range ( 0, $max);
              unset($zahlen[0]);

              Grüße
              Andreas

              1. Hallo,

                danke, es klappt jetzt.

                Gruß,
                Henning

                --
                Gruß aus Braunschweig