Page 1 sur 1

Besoin d'aide avec fonction array_rand et array_splice

Posté : 13 févr. 2014, 18:28
par Mousshaker
Bonjour A tous
J'ai cherché une section de présentation membre avant de commencer de but en blanc, mais je n'ai pas trouvé.
S'il en existe une, excusez ma mauvaise recherche et j'irai la remplir :)

Tout débutant en PHP je tâtonne un peu à droite à gauche.

Je cherche à générer une ligne de 9 valeurs (soyons précis, de 9 chiffres), allant de 1 à 9, triés aléatoirement et par groupe de 3 chiffres
Donc résultat1= A,B,C; résultat2=D,E,F ; résultat3=G,H,I
Résultat final = ABCDEFGHI

j'ai donc commencé simple avec un array et une fonction de choix aléatoire.
Dans cet exemple je lui demande donc de choisir 3 valeurs de mon tableau, et de façon aléatoire.
$numbers=array(1,2,3,4,5,6,7,8,9);

$result=array_rand($numbers,3);
print_r($result)  ;
Très bien, sauf que parfois ca va, mais parfois il me sort un "0" parmi les 3 valeurs...?
//résultat
Array ( [0] => 0 [1] => 4 [2] => 5 )
Pourquoi donc ?
mon ARRAY va de 1 à 9, pas de 0 à 9...
Où va-t-il chercher le 0 ?

Re: Besoin d'aide avec fonction array_rand et array_splice

Posté : 13 févr. 2014, 18:41
par computarelier
Salut,

Est-ce qu'il t'a déjà retourné 9 ? Non, hein ? :-)

Regarde la doc : "Sélectionne une ou plusieurs valeurs au hasard dans un tableau et retourne la ou les clés de ces valeurs."
Il te retourne pas les valeurs, mais les clefs ! C'est à dire qu'après tu peux faire :
echo $numbers[$result[0]];
echo $numbers[$result[1]];
// etc ...
echo $numbers[$result[8]];
Et hop, ils sont là tes chiffres ;-)

@+

Re: Besoin d'aide avec fonction array_rand et array_splice

Posté : 13 févr. 2014, 18:44
par Mousshaker
Ah oui en effet... 8 au maxi ^^

Donc si je comprends bien, c'est que je n'utilise pas la bonne fonction, ou du moins pas correctement
=> shame :oops:

mais alors, quelle fonction je peux utiliser pour qu'il me sélectionne et me retourne, aléatoirement, 3 valeurs parmi les 9 de mon tableau ? :|

Re: Besoin d'aide avec fonction array_rand et array_splice

Posté : 13 févr. 2014, 18:56
par xTG
$numbers=array(1,2,3,4,5,6,7,8,9);
$returnNumber = 3;
$keys = array_rand($numbers, $returnNumber); // on sort trois clés
foreach($keys as $key)
{
   echo $numbers[$key] . '<br />';
}
ou bien :
$numbers=array(1,2,3,4,5,6,7,8,9);
shuffle($numbers); // on mélange
// on extrait trois nombres
echo array_pop($numbers). '<br />';
echo array_pop($numbers). '<br />';
echo array_pop($numbers);

Re: Besoin d'aide avec fonction array_rand et array_splice

Posté : 13 févr. 2014, 19:06
par sirakawa
Sélectionne une ou plusieurs valeurs au hasard dans un tableau et retourne la ou les clés de ces valeurs.
IQuand il tire 1, il renvoie la clef 0 sauf si tu écris ainsi
$nombres = array (1 =>1, 2=>2....);

Re: Besoin d'aide avec fonction array_rand et array_splice

Posté : 13 févr. 2014, 19:21
par Mousshaker
Si je commence à confondre CLEF et VALEUR, effectivement, je suis mal barré :/

Merci de votre aide :)

Mais du coup, j'ai toujours mon second problème auquel je viens maintenant : la fonction array_splice

J'ai donc sélectionné par mis mon ARRAy $tableau 3 valeurs, qui se trouvent dans $résult.
Je souhaiterais maintenant extraire de $tableau, les 3 valeurs de $result

EXEMPLE :
$numbers=array(1,2,3,4,5,6,7,8,9);
// j'ai fais mon array_rand et j'ai en résultat suite à print_r($result):

Array ( [0] => 1 [1] => 3 [2] => 9 ) 
Je voudrais donc maintenant exclure 1, 3 et 9 de $tableau
J'ai donc fais :
for ($k=0;$k<3;$k++)
    {
        
  array_splice($numbers,$result[$k],1);
        
     }
Et là, il me sort , lorsque je lui demande de me retourner les valeurs de $numbers
print_r(array_values($numbers));

//résultat obtenu :
Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 6 [4] => 7 [5] => 8 [6] => 9 ) 
Il ne m'a donc déjà pas retiré 3 valeurs (comme j'ai demandé dans ma boucle), mais seulement 2
Et en plus, les valeurs de $result se trouvent toujours dans $tableau

je sais que j'ai mal utilisé la fonction, mais je n'arrive pas à comprendre où

Re: Besoin d'aide avec fonction array_rand et array_splice

Posté : 13 févr. 2014, 21:17
par xTG
array_splice — Remove a portion of the array and replace it with something else
Tout est dit...
Pour supprimer un élément regardes plutôt du côté de unset().

Re: Besoin d'aide avec fonction array_rand et array_splice

Posté : 13 févr. 2014, 22:08
par Mousshaker
Alors au temps pour moi
J'avais cru comprendre que si y'avait de rien de spécifié en remplacement, il se contentait de supprimer ^^

Merciii

Re: Besoin d'aide avec fonction array_rand et array_splice

Posté : 13 févr. 2014, 22:52
par xTG
Bon en fait on va avoir le droit tous les deux d'aller dormir...
Tu as raison sur le dernier paramètre (j'avais mal compté tes paramètres).
Par contre tu n'utilises pas correctement la fonction.
array_splice($numbers,$result[$k],1);
Va supprimer à partir de l'index $result[$k] 1 valeur de l'array $numbers.
Cela n'a aucunement pour but de supprimer la valeur $result[$k].
Pour cela le plus simple est la fonction unset() comme dit précédemment.
Ou bien en utilisant array_splice avec une clé et non une valeur (mais ça reste utiliser un bulldozer pour couper une fleur...). :mrgreen:

Re: Besoin d'aide avec fonction array_rand et array_splice

Posté : 14 févr. 2014, 10:29
par Mousshaker
Bah avec un buldozer on est sur que la fleur ne nous échappe pas au moins :mrgreen: ^^
Effectivement, je crois aussi que mon soucis venait encore et toujours de là : travailler avec les CLEF en les prenant pour les VALEURS...
Fatalement, ca ne risque pas de me faire le résultat attendu :non:

En te remerciant bien