corriger mon implode?

Eléphant du PHP | 319 Messages

21 oct. 2007, 11:12

hello,

j'ai une fonction qui retourne un resultat sous forme de tableau:

Code : Tout sélectionner

function random_draw() { $numbers=array('01','02','03','04','05','06','07','08','09','10','11','12'); //Get 4 unique random keys from $numbers array. $rand_keys = array_rand($numbers, 4); sort($rand_keys); foreach ($rand_keys as $k=>$v) { print_r("$numbers[$v]"); } }

maintenant dans un autre fichier j'appelle la fonction et je souhaite transformer le tableau en chaine de caracteres avec un implode:

Code : Tout sélectionner

$date = time(); $nums = random_draw(); $result = implode($nums, ""); $query = ("INSERT INTO grid_winning (id_grid, date , winning_grid) VALUES ('', '$date', '$result')"); mysql_query($query) or die('Invalid query: ' . mysql_error());

mais ca me retourne une erreur type "BAD ARGUMENT" a cette ligne:

Code : Tout sélectionner

$result = implode($nums, "");

je ne vois pas d'ou sort le probleme... (et idealement j'aimerais bien avoir mon implode dans la fonction mais ca ne marche pas non plus)

est ce que ca parlerait a qq un ce type de probleme svp??

merci
Modifié en dernier par choubix le 21 oct. 2007, 11:32, modifié 1 fois.

Eléphant du PHP | 443 Messages

21 oct. 2007, 11:18

Salut,

Déjà si le code du début correspond à une fonction, ton algo ne fait rien du tout et ne retourne rien.
Sinon, c'est quoi ton erreur ?


Tracker.

Eléphant du PHP | 319 Messages

21 oct. 2007, 11:34

salut tracker, je n'avais pas mis le code de la fonction en entier.

j'ai edite mon message pecedent pour que ca soit visible.
l'erreur est de type "bad argument" a la ligne

Code : Tout sélectionner

$result = implode($nums, "");
ca m'empeche d'executer ma requete d'insertion correctement :(

Eléphant du PHP | 443 Messages

21 oct. 2007, 11:36

Si tu veux que ta fonction retourne un tableau, il devrait y avoir un 'return' quelque part, non ?
[edit] Et puis arrête de mettre tes variables entre ", sans raison.

Tracker.
Modifié en dernier par Tracker le 21 oct. 2007, 11:41, modifié 1 fois.

Eléphant du PHP | 319 Messages

21 oct. 2007, 11:40

si j'utilise return au lieu de print_r() dans la fonction ca n'affiche plus rien sur la page ou je l'appelle...

par ailleurs l'erreur BAD Arguments elle est toujours la.

Eléphant du PHP | 443 Messages

21 oct. 2007, 11:42

si j'utilise return au lieu de print_r() dans la fonction ca n'affiche plus rien sur la page ou je l'appelle...

par ailleurs l'erreur BAD Arguments elle est toujours la.
On va y aller pas à pas, alors ta fonction random_draw(...) doit faire quoi ?


Tracker

Eléphant du PHP | 319 Messages

21 oct. 2007, 11:45

tel que je le lis:

la fonction random draw fait un tirage aleatoire de 4 chiffres dans un tableau comporatant 12 valeurs

les valeurs tirees au sort sont ordonnees par ordre croissant et mises dans un tableau

puis on affiche ce tableau ( print_r() )


lors de l'appel: je recupere le tableau, je l'implode pour en faire une chaine de caracteres et je stocke dans la table correpondante.

ViPHP
ViPHP | 4039 Messages

21 oct. 2007, 11:47

Je te conseilles d'utiliser de la doc php, un livre, quelque chôse qui te permette d'approfondir le sujet.

S'il n'y a pas de return dans une fonction, elle ne retournera aucune valeur, niet, nada. Rien. (sauf peut-être une erreur, à la limite). Tu ne peux rien en récuperer.

Print_r ne sert qu'a afficher le contenu du tableau, utile lors du deboguage, mais assez inutile par ailleurs.

Et ton implode ne marche pas puisque ta variable est vide.
Modifié en dernier par Berzemus le 21 oct. 2007, 11:53, modifié 1 fois.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 319 Messages

21 oct. 2007, 11:52

salut Berzemus,

mon tirage aleatoire s'affiche correctement a l'ecran lors de l'appel de la fonction.

ce que je souhaite faire c'est en recuperer la valeur et la stocker dans winning_grid

ViPHP
ViPHP | 4039 Messages

21 oct. 2007, 11:55

Alors tu mets
return $rand_keys;
à la fin de ta fonction.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 443 Messages

21 oct. 2007, 11:59

Alors pour ta fonction random_draw(), la fonction sort(...) convertisant le contenu en int...
Utilise la code suivant,
function toString($n) { return sprintf('%02d',$n); }
function random_draw() 
{
	$numbers = array(1,2,3,4,5,6,7,8,9,10,11,12);
	
	//Get 4 unique random keys from $numbers array.
	$rand_keys = array_rand($numbers, 4);
	sort($rand_keys, SORT_REGULAR);	
	return array_map('toString', $rand_keys);
}

Tracker.

Eléphant du PHP | 319 Messages

21 oct. 2007, 12:32

je vais essayer mais dans mon cas j'ai besoin que 01 , 02, 03 .. soient enregistres tels quel. et non pas 1, 2, 3 ...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 oct. 2007, 12:35

au passage profite en pour regarder l'ordre des paramètres pour implode()

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 319 Messages

21 oct. 2007, 12:42

comme mon implode fonctionnait pas je suis passe sur le net et j'ai trouve des codes dans lesquels les parameters etaient inverses... (hehehe ;) )
Modifié en dernier par choubix le 21 oct. 2007, 13:35, modifié 1 fois.

ViPHP
ViPHP | 4039 Messages

21 oct. 2007, 13:24

comme mon implode fonctionnait (...)
C'est drôle, moi c'est quand ça fonctionne pas que je vais voir :wink:

Ceci dit, il est plus utile de voir directement les détails de la fonction sur php.net et essayer de l'appliquer, que d'aller pêcher des exemples dans l'un ou l'autre script, dont la qualité varie énormément. Ainsi, tu aurais vu que pour des "raisons historiques", implode accepte les paramètres dans n'importe quel ordre, mais il est préférable des les utiliser dans le même ordre que explode. (une histoire de cohérence).
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.