Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1447 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec array_rand

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec array_rand

n°1538983
gabgab
Une loi juste rend libre.
Posté le 05-04-2007 à 15:21:13  profilanswer
 

Bonjour,
 
J'aimerai avoir votre aide, s'il vous plais.
 
Je souhaite crée une galerie photo, avec des images aléatoires mais qui soit affiché une seule fois.
 
J'ai donc écris ça :
 

Code :
  1. $nbimages =100;
  2. $i=0;
  3. $input = array ("0", "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", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100" );
  4. $rand_keys = array_rand ($input, $nbimages);
  5. while($i != $nbimages)
  6.     {
  7.     echo '<img src="photo';
  8.     print $a =$input[$rand_keys[$i]];
  9.     echo '.jpg">',"\n";
  10.     $i++;
  11.     }


 
Ça marche super bien ..... Mais Ça marche que pour 100 photos dans la galerie.  
 
Si j'ai 400 photos je ne vais pas écrier 1 2 3 4 .... jusqu'a 400.  
J'ai aussi cherché et j'ai toujours trouvé une variable dans la quel il faut définir tt les nombre du tableaux à la main.  
Je souhaite donc remplacé ces nombres par une variable..... mais je n'y arrive pas, j'ai essayer tt plein de truc, et j'obtiens souvent cela  
 
Parse error: parse error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in http://www.mon_domaine.com/dev/index.php on line 4
 
Je ne sais pas s'il existe une autre méthode.
 
Je vous remercie par avance de votre aide.

mood
Publicité
Posté le 05-04-2007 à 15:21:13  profilanswer
 

n°1539000
sielfried
Posté le 05-04-2007 à 15:44:47  profilanswer
 

[:pingouino]  
Déjà, je comprends pas ce que t'essaies de faire. En gros là tu lui demandes de te sélectionner aléatoirement 100 nombres parmi 101. [:pingouino]  
 
Ensuite, effectivement, tu vas pas te taper tout le tableau a la main, t'as http://fr.php.net/range pour ça... mais ça oblige à construire un tableau assez énorme. L'autre solution c'est d'utiliser mt_rand autant de fois que nécessaire en stockant les valeurs déjà trouvées pour éviter de retomber sur la même.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1539016
masklinn
í dag viðrar vel til loftárása
Posté le 05-04-2007 à 15:52:57  profilanswer
 

sielfried a écrit :

Ensuite, effectivement, tu vas pas te taper tout le tableau a la main, t'as http://fr.php.net/range pour ça... mais ça oblige à construire un tableau assez énorme. L'autre solution c'est d'utiliser mt_rand autant de fois que nécessaire en stockant les valeurs déjà trouvées pour éviter de retomber sur la même.


Je conseillerais quand même de passer par range plutôt que des mt_rand à répétition:

 
  • Même si génère un tableau de taille 10000, ça ne prend pas une place si énorme
  • Le code est beaucoup plus clair (l'intention est clairement exprimée), donc plus facile à comprendre pour le maintenir
  • Le code est infiniment plus simple (pas de stockage de valeurs intermédiaires, pas de modifications d'arrays existants, pas de conditionnels, ...)


Donc imo passer par range + array_rand dans un premier temps, ensuite si les perfs sont insuffisante ou la consommation de mémoire est trop grande vérifier si le problème vient de là et réimplémenter le truc via mt_rand si c'est le cas (et que mt_rand améliore les perfs)


Message édité par masklinn le 05-04-2007 à 15:53:16

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1539032
sielfried
Posté le 05-04-2007 à 16:00:33  profilanswer
 
n°1539124
gabgab
Une loi juste rend libre.
Posté le 05-04-2007 à 17:08:53  profilanswer
 

Merci pour vos réponses mais je n'y trouve pourtant pas la solution que j'espérais, j'ai du mal m'exprimer.
 
 
Comme je peux déclarer un tableau avec une dimension variable car je peux avoir besoin d'un tableau avec 10 valeurs auquel cas je peux les écrire dans le code, mais je peux aussi avoir besoin avec le même tableau de 5 000 valeurs et je ne pourrai certainement pas les écrire toutes.
 
Quel est la syntaxe la mieux adaptée à mon souci de tableau de grande dimentions.
 
Est ce que je ne pourrais pas mettre une variable a la place example !
 

Code :
  1. $valeur =' "0", "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", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100" ';
  2. $input = array ($valeur);


 
Ou encore mettre un écart de valeurs exemple !  

Code :
  1. $valeur =['0-5000'];
  2. $input = array ($valeur);


 
 

n°1539128
soju
One shot !
Posté le 05-04-2007 à 17:12:31  profilanswer
 

tu es sûr d'avoir lu la première réponse de sielfried ?

n°1539152
gabgab
Une loi juste rend libre.
Posté le 05-04-2007 à 18:21:37  profilanswer
 

J'ai bien lu la réponse de sielfried.  
 
J'ai essayé différantes choses, dont une qui me donne une chaine de chiffre 012345678910. Et lorsque je donne cette dernière à la fonction aléatoire j'ai de nouveau une erreure.
 
Il est vrais que certaines choses expliquée dans cette page d'aide sont pour moi obscures, c'est pour cette raison que j'ai ajouté une nouvelle réponse.
 
 
En fait j'ai une fonction qui me calcule le nombdre de photos que j'ai dans un dossier et qui me retourne donc une valeur et je souhaiterais utiliser cette même valeur dans ma fonction aléatoire afin d'automatiser complètement mon script.
 
 

n°1539155
sielfried
Posté le 05-04-2007 à 18:33:46  profilanswer
 

Citation :


$valeur =['0-5000'];
$input = array ($valeur);


 
Si t'avais lu un minimum le lien que j'ai donné sur range, tu te demanderais pas comment faire ça...


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1539168
gabgab
Une loi juste rend libre.
Posté le 05-04-2007 à 18:54:15  profilanswer
 

J'ai lu la page et j'ai réussi à faire des écarts de 0-5000 sans soucis :) Je te remercie.  
 
Mais comme je le disais dans mon dernier poste je n'arrive pas à donner cette chaine générées.  
 

Code :
  1. foreach(range(0,5000) as $number) {
  2.     echo $number;
  3. }
  4. $rand_keys = array_rand ($number, $nbimages);


j'ai bien mon écart mais là j'ai une erreur a la ligne 4 car array_rand ne supporte visiblement pas une chaine 012345678901112131415161718......49995000.  
 
Après comme je le disais aussi dans mon poste précédant je n'ai pas compris tt les exemples, c'est pour cette raison que je vous redemande de l'aide.
 
 
Merci par avance

n°1539175
masklinn
í dag viðrar vel til loftárása
Posté le 05-04-2007 à 18:58:43  profilanswer
 

gabgab a écrit :

Code :
  1. foreach(range(0,5000) as $number) {
  2.    echo $number;
  3. }



 [:lacuna coil]  
 
C'est n'importe quoi, là tu donnes à "$number" les valeurs 0, puis 1, puis 2, ... 5000
 
Donc quand tu sors de ton foreach $number est un entier contenant le nombre 5000, pas un array [:jofission]  
 
C'est quand même pas compliqué de réfléchir 3 secondes si? [:bbcmoi]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 05-04-2007 à 18:58:43  profilanswer
 

n°1539203
gabgab
Une loi juste rend libre.
Posté le 05-04-2007 à 19:46:35  profilanswer
 

J'ai bien vu que je donnais les valeurs 0, puis 1, puis 2 jusqu'a 5000. (c'est ce que je dis plus haut 012345678901112131415161718......49995000)
 
Mais je n'arrive pas à faire autrement.  
 
Je te demande de bien vouloir m'aide s'il te plais, car j'ai l'impressions que tu sais le faire et moi non je n'y arrive pas.
 
 
Merci par avance.

n°1539213
masklinn
í dag viðrar vel til loftárása
Posté le 05-04-2007 à 19:56:36  profilanswer
 

Heuuu c'est pas très compliqué hein [:bertie wooster]  
 
range() renvoie un array, tu colles ton array dans une variable au lieu d'itérer dessus (j'veux dire quand tu vois des docs sur PHP.net t'es censé les comprendre pas les recopier telles quelles et te plaindre que ça fonctionne pas  [:petrus75]  [:bertie wooster]  [:chrisbk]  [:darksamus]  [:petrus jar] )
 
Et ensuite tu files ton array à array_rand [:doc petrus]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec array_rand

 

Sujets relatifs
problème avec php5[Résolu] PHP MySQL - Problème de recherche dans la base
Problème positionnement divProblème de type: Pixel =int, char ?
probleme avec serveur MySQLProblème TextArea sous firefox
Problème de réception TCPproblème d'upload
Problème pour lancer un fichier midi à partir d'Excel[Java - cryptographie] Problème de vérification de signature
Plus de sujets relatifs à : Problème avec array_rand


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR