Ankündigung

Einklappen
Keine Ankündigung bisher.

Zufallsscript zweimal ausführen und Ergebnis aus erstem Mal ausschließen?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zufallsscript zweimal ausführen und Ergebnis aus erstem Mal ausschließen?

    Hallo,

    ich habe ein gewichtetes Zufallsscript, läuft wunderbar.

    PHP-Code:
    <?
    function dw_rand ($space, $errval = false) { 
            $res = 1000000000; 
            $rn = mt_rand(0, $res - 1); 

            foreach ($space as $element => $probability) { 
            $psum += $probability * $res; 
            if ($psum > $rn) return $element; 
            } 
    return $errval; 

    ?>


    <?
        $dice["cd"]            = 0.25; 
        $dice["contact"]    = 0.0; 
        $dice["gig"]        = 0.05; 
        $dice["jukebox"]    = 0.05; 
        $dice["mood"]        = 0.0; 
        $dice["newsletter"]    = 0.1; 
        $dice["regio"]        = 0.3; 
        $dice["store"]        = 0.1; 
        $dice["tour"]        = 0.05; 
        $dice["video"]        = 0.1; 
    ?>
    <?
    $box = dw_rand($dice);
    ?>

    Jetzt meine Frage: Hat jemand eine Idee, wie ich es hinkriegen kann, dieses Script sozusagen an zwei Stellen der Webseite laufen zu lassen?
    Wichtig: Dabei soll ein doppeltes Ergebnis nicht vorkommen.

    Beispiel: Erstes Zufallsergebnis: "cd"
    Dann soll dieses Ergebnis beim zweiten Ergebnis nicht vorkommen dürfen.

    Ich habe so gar keinen Ansatz irgendwie...


  • #2
    Ganz einfach - Du musst Dein $dice-Array dynamisch anlegen. Und bspw. in der Session vorhalten.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Hi,

      also erst mal zu deiner Zufallsfunktion.
      Ist das auch wirklich Zufall?
      Ich meine die chance, dass das erste array-element zurückgegeben wird ist ja um einiges höher wie wenn das letzte element zurückgegeben wird (auch bei gleichem "Gewicht")?
      ...kann sein das ich mich täusche.

      Zu deiner 2ten Frage:
      Das sollte ja eigentlich ganz einfach sein, einfach das schon vorgekommene Elemen aus dem Array löschen.


      Ich würde da eher sowas in der Art machen:
      Diese function erstellt einfach Zufallszahlen, diese kommen in ein Array welches sortiert wird und dann der Schlüssel von der größten Value ausgegeben wird.

      PHP-Code:
      function dw_rand($points) {
        foreach(
      $points as $key => $value) {
          
      $rand[$key] = rand(0$value*1000);
        }
        
      asort($randSORT_NUMERIC);
        
      end($rand);
        return 
      key($rand);
      }

      $dice["cd"]            = 0.25
      $dice["contact"]    = 0.0
      $dice["gig"]        = 0.05
      $dice["jukebox"]    = 0.05
      $dice["mood"]        = 0.0
      $dice["newsletter"]    = 0.1
      $dice["regio"]        = 0.3
      $dice["store"]        = 0.1
      $dice["tour"]        = 0.05
      $dice["video"]        = 0.1;

      $rand dw_rand($dice);
      unset(
      $dice[$rand]);
      echo 
      $rand;
      $rand dw_rand($dice);
      unset(
      $dice[$rand]);
      echo 
      $rand;
      //... 
      UNGETESTET!

      EDIT: Meinst du in der selben php-Datei oder 2 mal auf verschiedenen php-Dateien auf deiner HP?
      Falls letzteres, würde ich wie von nikosch bereits gesagt, dieses Array in eine $_Session schreiben.

      Kommentar


      • #4
        Zitat von BlackSpirit Beitrag anzeigen
        Ich meine die chance, dass das erste array-element zurückgegeben wird ist ja um einiges höher wie wenn das letzte element zurückgegeben wird (auch bei gleichem "Gewicht")?
        Gewicht ist aber nicht gleich, und es soll ja auch keine Gleichverteilung vorliegen.

        Das sollte ja eigentlich ganz einfach sein, einfach das schon vorgekommene Elemen aus dem Array löschen.
        Dann ergibt die Summe der Wahrscheinlichkeiten nicht mehr 1.
        Also müsste man dann die Wahl der Zufallszahl bzw. deren Auswertung auch entsprechend anpassen.

        Kommentar


        • #5
          Zitat von ChrisB Beitrag anzeigen
          Dann ergibt die Summe der Wahrscheinlichkeiten nicht mehr 1.
          Also müsste man dann die Wahl der Zufallszahl bzw. deren Auswertung auch entsprechend anpassen.
          Das sollte dann mit meiner Funktion funktionieren.

          PHP-Code:
          function dw_rand($points) {
            foreach(
          $points as $key => $value) {
              
          $rand[$key] = rand(0$value*1000);
            }
            
          asort($randSORT_NUMERIC);
            
          end($rand);
            return 
          key($rand);

          Kommentar

          Lädt...
          X