Génération d'un mot

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Génération d'un mot

par zeus » 24 oct. 2005, 19:55

Je viens de tester la fonction plusieurs fois et la fonction array_rand() retourne un nombre d'élément donné aléatoirement mais jamais plus d'une fois le même élément.
;)
OK
Dans la doc de phpinfo, il n'y avait rien de stipuler sur cette aspect ni sur array_rand, ni sur rand donc je me posait la question.

Merci de tes précisions :pouce:

par Xenon_54 » 24 oct. 2005, 17:47

Non puisque s'il utilise un tableau de valeur aléatoire
Je viens de tester la fonction plusieurs fois et la fonction array_rand() retourne un nombre d'élément donné aléatoirement mais jamais plus d'une fois le même élément.

D'où la question de savoir s'il veut plus d'une fois la même lettre ou pas. Normalement un mot peut contenir plusieurs fois la même lettre.

;)

par eirwan » 24 oct. 2005, 17:07

Ok ben ça marche et je crois que j'ai compris , la vie est belle :lol:
Merci pour votre aide, vous êtes vraiment très rapides !

par charabia » 24 oct. 2005, 16:54

Oups une simple erreur :)

C'est

Code : Tout sélectionner

$mot_alea = $mot_alea . $tableau[$i];

par zeus » 24 oct. 2005, 16:54

Le mec prend un tableau de caractères et le mélange en récupérant 8 caractères. Ensuite il utilise une boucle foreach() pour toutes les concatener alors que implode() aurait suffit.
Il génère un tableau de 8 valeurs aléatoires
Ensuite il parcours ce tableau de valeurs aléatoires et récupérant la lettre correspondante dans le tableau qui contient les caractères
Finalement, il l'ajoute à une chaine initialisé à ""

je ne voit que 2 erreurs :
1°) pourquoi un tableau pour contenir les lettres alors qu'une chaine, comme toi, aurait suffit
2°) Quand il fait la concaténation, il s'est trompé sur le nom de la variable de gauche de l'opérateur d'attribution =
]Donc les problèmes suivants de posent:
1) Une lettre ne peut être réutiliser plus d'une fois à moins de l'insérer plus d'une fois dans le tableau de départ. Non puisque s'il utilise un tableau de valeur aléatoire
2) L'utilisation d'une boucle foreach() alors que implode() aurait suffit. idem
3) Il utilise une variable indéfinie et écrase ainsi à chaque tour de boucle la variable qu'il tente de construire.d'accord

par eirwan » 24 oct. 2005, 16:53

Et pour charabia, dans cette ligne :
 $mot_alea = $mot_de_passe . $tableau[$i]; 
Euh c'est quoi cette variable $mot_de_passe ? je vois pas d'où elle sort... :?

par zeus » 24 oct. 2005, 16:49

parce que un tableau est indexé de 0 à n et que s'il contient 2 valeurs, la dernière case est la case qui comporte l'index 1

Pour obtenir le plus grand index d'un tableau, tu predn sa taille -1

par Xenon_54 » 24 oct. 2005, 16:48

Cela suppose qu'une lettre ne peut pas être utilisée plus que 2 fois.
pourquoi donc ? :shock:
Outre le fait qu'il manque un modulo pour ne pas dépasser la taille du tableau, je ne vois pas la différence majeure entre vos fonctions
Le mec prend un tableau de caractères et le mélange en récupérant 8 caractères pour ensuite récupérer les index pour refaire une boucle.

Donc les problèmes suivants de posent:
1) Une lettre ne peut être réutiliser plus d'une fois à moins de l'insérer plus d'une fois dans le tableau de départ.
2) Il utilise une variable indéfinie et écrase ainsi à chaque tour de boucle la variable qu'il tente de construire.

Perso, je conseille de générer 8 chiffres aléatoirement et récupérer les lettres qui y sont associés dans le tableau comme le montre mon exemple.

par eirwan » 24 oct. 2005, 16:47

Merci pour vos réponses, mais bon je suis quand même un noob, donc voilà, mon but c'est pas de faire du copier coller mais de les comprendre, et là ça coince ! :)
Ben déjà, je vois qu'il y en a une de basée sur un tableau et une autre sur une variable (vous me dites si j'ai faux, hein).
Mais , Xenon_54, pourquoi tu enlèves 1 à la valeur de $char ?
Et que veut dire cette notation ?
$str .= $char[ rand(0, $max) ]; 
Ca veut dire que $char est un tableau ?

par zeus » 24 oct. 2005, 16:38

Cela suppose qu'une lettre ne peut pas être utilisée plus que 2 fois.
pourquoi donc ? :shock:
Outre le fait qu'il manque un modulo pour ne pas dépasser la taille du tableau, je ne vois pas la différence majeure entre vos fonctions

par Xenon_54 » 24 oct. 2005, 16:35

Cela suppose qu'une lettre ne peut pas être utilisée plus que 2 fois.

Tu peux toujours utiliser cette fonction si tu veux utiliser plus d'une fois la même lettre:
<?php
function randomString( $length = 6, $char = 'abcdefghijklmnopqrstuvwxyz0123456789' ) {
    $str = '';
    $max = strlen($char)-1;
    for ($i=1; $i<=$length; $i++) {
        $str .= $char[ rand(0, $max) ];
    }
    return $str;
}
?> 

par eirwan » 24 oct. 2005, 16:34

Je vois a peu près ce que ton script fais, mais je ne comprends pas ce que représennte $i par contre... Mais oui c'est ça qu'il me faut !

par charabia » 24 oct. 2005, 16:25

De ce genre là ?
<?php

$tableau = array("a", "b", "c" .......... "7", "8", "9");
$valeurs_aleatoires = array_rand($tableau, 8);

$mot_alea = "";

foreach($valeurs_aleatoires as $i)
{
     $mot_alea = $mot_de_passe . $tableau[$i];
}

echo "Le mot aléatoire est : " . $mot_alea;

?>

par eirwan » 24 oct. 2005, 16:22

Excusez moi j'avais oublié de me loguer... :roll:

Génération d'un mot

par Invité » 24 oct. 2005, 16:20

Bonjour, je voudrais savoir comment en PHP peut on générer un mot au hasard ? (à partir d'une liste de lettres stockée dans une variable)
Je pense qu'il faut utiliser des boucles imbriquées, mais je vois pas trop comment après...