8711 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai besoin de votre aide pour régler un petit problème en PHP.

J'ai besoin de récupérer aléatoirement une série de nombre compris dans un tableau avec exclusion de certains de ces nombres.

La problématique est la suivante
Je dois afficher 24 vignettes correspondantes à 24 rubriques différentes.

Pour commencer je récupère les numéros de rubriques qui sont illustrées par une vignette
par exemple la rubrique 1, 3, 6 ,12 et 29 (ça c'est bon)
je stocke ces nombre dans
$rubriques_OQP



J'ai un tableau composé de 58 chiffres (58 rubriques mais 24 affichées simultanément)

$choixaleatoires=array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','25','27','28','29','30','31','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','54','55','56','58');


Ici j'ai donc 5 rubriques illustrées (1, 3, 6 ,12 et 29), il me faut donc tirer aléatoirement 19 rubriques (24 - 5) pour compléter les 24 rubriques en excluant les rubriques déjà occupée (1,3,6,12 et 29).

Comment puis-je faire ?

avec un array_diff ?

Merci d'avance pour votre aide
Modifié par pareto (27 May 2013 - 18:13)
salut,
un moyen simple de faire serait de vérifier à chaque fois si la valeur générée aléatoirement existe dans le tableau et de n'itérer la boucle que si celle-ci n'existe pas. Comme un exemple vaut mieux qu'un long discours :

$rubriques_OQP = array('1', '3', '6' , '12', '29');
$choixaleatoires=array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','25','27','28','29','30','31','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','54','55','56','58');
$array_diff = $rubriques_OQP;
$i=0;
do{
	$values_exists = false;
	$r = rand(0, count($choixaleatoires)-1);
	foreach($array_diff as $val){
		$val==$choixaleatoires[$r] && ($values_exists=true);
	}
	if (!$values_exists) {
		$array_diff[] = $choixaleatoires[$r];
		$i++;
	}
}while($i<19);

c'est donc une façon de faire parmi tant d'autres.
Allez...


$selected = array('1', '3', '6', '12', '29');
$categories = array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','25','27','28','29','30','31','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','54','55','56','58');
$total = 24;

$temp = array_diff($categories, $selected);
$keys = array_rand($temp, $total - count($selected));

foreach ($keys as $k) {
  $selected[] = $categories[$k];
} 

var_dump($selected);