wake-up-neo.net

Zufallszahlen ohne Wiederholungen erzeugen

Ich baue eine Website, die bei jeder Aktualisierung der Seite zufällig eine Yelp-Auflistung anzeigt. Die Yelp-Such-API gibt 20 Einträge in einem Array zurück. Im Moment verwende ich die Funktion Rand (0,19) von PHP, um bei jeder Aktualisierung der Seite eine zufällige Auflistung zu generieren ($ business [Rand (0,19)]).

Kann mich jemand auf eine intelligentere Methode zur Zufallsgenerierung verweisen? Ich möchte alle 20 Einträge einmal anzeigen, bevor sie wiederholt werden. Was ist die bevorzugte Methode, um dieses Problem zu lösen?

die unten stehende Antwort funktioniert nicht, da die Zahlen jedes Mal neu erstellt werden, wenn ich die Seite aktualisiere. Ich schätze, ich muss speichern, welche Nummern ich bereits verwendet habe.

$numbers = range(0, 19);

shuffle($numbers);

// Handle Yelp response data
$response = json_decode($data);
$RANDOM = Rand(1,19);
$business = $response->businesses;

echo "<img border=0 src='".$business[$RANDOM]->image_url."'><br/>";
echo $business[$RANDOM]->name."<br/>";
echo "<img border=0 src='".$business[$RANDOM]->rating_img_url_large."'><br/>";

?>
12
ryank

Einfachste Lösung:

$numbers = range(1, 20);
shuffle($numbers);

Alternative:

<?php

function randomGen($min, $max, $quantity) {
    $numbers = range($min, $max);
    shuffle($numbers);
    return array_slice($numbers, 0, $quantity);
}

print_r(randomGen(0,20,20)); //generates 20 unique random numbers

?>

Ähnliche Frage: # 5612656

Codepad: http://codepad.org/cBaGHxFU

Update:

Sie erhalten alle Einträge in einem Array mit dem Namen $businesses.

  1. Generieren Sie eine zufällige Auflistungs-ID mit der oben angegebenen Methode und speichern Sie dann Ihre Datenbanktabelle.
  2. Generieren Sie bei jeder Seitenaktualisierung eine zufällige Auflistungs-ID und prüfen Sie, ob sie mit dem Wert in Ihrer Datenbank übereinstimmt. Wenn nicht, zeigen Sie diese Auflistung an und fügen Sie diesen Wert Ihrer Tabelle hinzu.
  3. Weiter mit Schritt 1.

Wenn dies abgeschlossen ist, haben Sie alle 20 Einträge auf einmal angezeigt.

Hoffe das hilft!

33
Amal Murali

Ich würde das über while-Schleife versuchen:

<?php

  $i = 0;
  $arr = array();

  while($i<10){
    $num = Rand(1, 12);
    $c = 0;
    echo $num . "<br>";

    for($j=0; $j<4; $j++){
      if($arr[$j] == $num){
        $c++;
        break;
      }
    }
    if($c==0){
      $arr[$i] = $num;
      $i++;
    }
  }

  echo "<pre>";
  print_r($arr);
  echo "</pre>";
0
Gazi Anis