web-dev-qa-db-fra.com

Générer des nombres aléatoires sans répétition

Je construis un site Web qui affichera de manière aléatoire une liste Yelp à chaque actualisation de la page. L'API de recherche Yelp renvoie 20 annonces dans un tableau. En ce moment, j'utilise la fonction PHP Rand (0,19) pour générer une liste aléatoire chaque fois que la page est actualisée ($ business [Rand (0,19)]].

Quelqu'un peut-il me référer à une méthode plus intelligente pour randomiser? Je souhaite afficher les 20 annonces une fois avant qu’aucune d’entre elles ne soit répétée. Quelle est la méthode préférée pour traiter ce problème?

la réponse ci-dessous ne fonctionne pas car les nombres sont recréés chaque fois que j'actualise la page. Je suppose que j'ai besoin de stocker les numéros que j'ai déjà utilisés?

$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

La solution la plus simple:

$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

?>

Question similaire: # 5612656

Codepad: http://codepad.org/cBaGHxFU

Mettre à jour:

Vous obtenez toutes les listes dans un tableau appelé $businesses.

  1. Générez un ID de liste aléatoire en utilisant la méthode indiquée ci-dessus, puis enregistrez-le dans votre table de base de données.
  2. À chaque actualisation de page, générez un ID de liste aléatoire et vérifiez s'il correspond à la valeur de votre base de données. Sinon, affichez cette liste et ajoutez cette valeur à votre table.
  3. Allez à l'étape 1.

Lorsque cela est terminé, vous aurez affiché toutes les 20 annonces à la fois.

J'espère que cela t'aides!

33
Amal Murali

Je voudrais essayer ceci via la boucle while:

<?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