Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/06/2011, 15h32   #1
Invité de passage
 
Femme
Inscription : juin 2011
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : juin 2011
Messages : 1
Points : 0
Points : 0
Par défaut Fonction aléatoire sur tableaux

Bonjour,

Je travail en ce moment sur une fonction permettant de choisir 2 nombres aléatoirement dans un tableau de valeurs définies, sachant que le deuxième nombre doit être différent du premier et qu'il ne doit jamais avoir été tiré en même temps que le premier (pour cela je parcours un deuxième tableau de valeurs).

Je suis dessus depuis plusieurs jours et je dois avouer que je bloque ... surtout sur la logique.

Voici mon code simplifié :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
<?php
$tableau_valeurs = array(24 => 32, 32 => 24.39);
$tableau_valeurs_2 = array(1 => 24, 2 => 32, 3 =>39);
$nombres_elements = 3;
$i = 0;
 
$chiffre_aleatoire_1 = array_rand ($tableau_valeurs_2, 1);
$chiffre_aleatoire_2 = array_rand ($tableau_valeurs_2, 1);
 
if (isset($tableau_valeurs[$tableau_valeurs_2[$chiffre_aleatoire_1]])){
	$tableau_valeurs_separes = explode ('.', $tableau_valeurs[$tableau_valeurs_2[$chiffre_aleatoire_1]]);
	$nombre_valeurs_separes = count ($tableau_valeurs_separes);
	while (($i == 0)||($chiffre_aleatoire_2 == $chiffre_aleatoire_1)){
		for ($j = 0; $j <= $nombre_valeurs_separes; $j++){
			if ($tableau_valeurs_2[$chiffre_aleatoire_2] == $tableau_valeurs_separes[$j]){
				break;
			}
			if (($j == $nombre_valeurs_separes)&&($chiffre_aleatoire_2 != $tableau_valeurs_separes[$j])){
				$i = 1;
			}
		}
		if ($chiffre_aleatoire_2 < $nombres_elements){
			$chiffre_aleatoire_2 = $chiffre_aleatoire_2 + 1;
		}
		else{
			$chiffre_aleatoire_2 = 1;
			if($chiffre_aleatoire_2 == $chiffre_aleatoire_1){
				$chiffre_aleatoire_2 = $chiffre_aleatoire_2 + 1;
			}
		}
	}
}
echo 'chiffre aleatoire 1 :'.$tableau_valeurs_2[$chiffre_aleatoire_1];
echo '<br />chiffre aleatoire 2 :'.$tableau_valeurs_2[$chiffre_aleatoire_2];
?>
Qu'en pensez-vous ?
Sachant que la fonction me renvoi régulièrement deux messages d'erreurs pour des offsets indéfinis, et que parfois les deux nombres sont les mêmes !
Claire-Diane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 17h47   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 548
Points : 2 548
Envoyer un message via Skype™ à rawsrc
Salut,

Je n'ai pas du tout compris ce que tu veux faire.
A tout hasard, je te propose une manière de sélectionner aléatoirement de multiples valeurs au sein d'un tableau :
Code :
1
2
3
4
5
6
7
8
9
10
<?php 
 
$nums = array(1, 24, 32, 24.39, 39);
 
shuffle($nums);
 
$aleaA = $nums[0];
$aleaB = $nums[1];
 
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 10h04   #3
Membre Expert
 
Avatar de darkstar123456
 
Inscription : mars 2008
Messages : 1 180
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Belgique

Informations forums :
Inscription : mars 2008
Messages : 1 180
Points : 1 357
Points : 1 357
Envoyer un message via Skype™ à darkstar123456
ou encore via array_rand() qui est (il me semble) plus rapide vu qu'il prend juste les clés :

Code :
1
2
3
4
5
6
<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
?>
__________________
N'hésitez pas à me contacter !
darkstar123456 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 23/06/2011, 13h33   #4
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 656
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 656
Points : 5 359
Points : 5 359
Autre possibilité : mélanger, retirer le 1er nombre et remélanger
Code :
1
2
3
4
5
$tab = array('a', 'b', 'c', 'd', 'e');
shuffle($tab);
$val1 = array_pop($tab);
shuffle($tab);
$val2 = array_pop($tab);
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h53.


 
 
 
 
Partenaires

Hébergement Web