Arrays association aléatoire et non identique

Résolu
Signaler
Messages postés
3
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2011
-
Messages postés
3
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2011
-
Bonjour,
je cherche à faire associer 2 arrays (contenant chacun les mêmes valeurs mais ordonnées de façon différente) afin de créer des paires uniques.....voici mon début de code (si je ne suis pas vraiment clair !) :

<?php
$amis1 = Array("bertrand", "ronan", "isabelle");// je commence par 3 personnes seulement pour faire simple
$amis2 = $amis1;	// copie du précédent array
shuffle ($amis2);	// on mélange ce nouvel array

// boucle inversée (du dernier au premier élément)
for ($i=count($amis1)-1; $i>=0; $i--){
$a = $amis1[$i];
$b = $amis2[$i];
if ($b!=$a) {
echo '
';
echo $a.' --> '.$b.'
';// le couple est bien formé de façon unique
echo '
';
}else{//end if
echo '
';
echo $a.' --> '.$b.'
';// les valeurs de ces 2 tableaux sont les mêmes
echo '
';
}
 
}
?>


J'ai donc, de façon aléatoire, des combinaisons qui se font bien :
isabelle --> bertrand
ronan --> isabelle
bertrand --> ronan

et parfois des combinaisons que je ne souhaite pas :
isabelle --> ronan
ronan --> isabelle
bertrand --> bertrand

Comment puis-je orienter mon code afin d'avoir toujours une combinaison dont les valeurs ne sont jamais identiques et ordonnée de façon aléatoire ?

Merci de vos conseils

2 réponses

Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
53
Il te faut utiliser une fonction récursive.

Genre :
<?php
function putter($mixed) 
{
$new_mixed = $mixed;
shuffle($new_mixed);
foreach($mixed AS $k => $v)
if($mixed[$k]==$new_mixed[$k])
return putter($mixed); 
return $new_mixed;
}

$array = putter(array('bertrand', 'ronan', 'isabelle'));
?>



______________________________________________________________________
Messages postés
3
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2011

Merci, effectivement c'est assez simple avec une fonction récursive qui cherche de façon aléatoire un autre nom à chaque fois qu'elle rencontre un nom identique.
Je ne suis pas encore à l'aise avec ce genre de mécanismes.

Merci du tuyau !