variable en sortit de boucle

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 : variable en sortit de boucle

par lux » 05 nov. 2006, 16:00

L'implode a l'avantage de faire en 1 ligne ce que l'autre code faisait en 2 ou 3.
Donc pour moi plus court et plus joli, et puis ça utilise moins de variables.

Mais l'autre code peut certainement servir dans d'autre cas, on sait jamais, à se garder sous le coude 8)

par Shrell » 05 nov. 2006, 15:56

très juste, j'ai pas fait gaffe :oops:
au niveau du temps d'exécution je n'ai aucune idée de la différence entre les deux, personnellement j'utilise presque toujours cette méthode parce que j'ai un peu du mal pour compter les lettres dans mes strings (je me retrouve toujours avec des ±1, dur dur...)
à toi de voir ce qui te convient le mieux ;)

par lux » 05 nov. 2006, 15:33

Sympa aussi le implode. Je suppose que plus rapide à l'exécution ? Et ça raccourcit le code, plus besoin de lui préciser d'enlever la dernière virgule.

Finalement, je prends quelle solution ? :lol:


EDIT : petite erreur dans ton code
    // on affiche les informations de l'enregistrement en cours   
    $emails[]= $data['email'];   
La il ne faut plus mettre la virgule, elle sera rajoutée au niveau du implode :wink:

par Shrell » 05 nov. 2006, 15:25

sinon, il y a aussi la solution de tout mettre dans un tableau et de faire un implode() sur le tout:
$sel_mail = query('SELECT email FROM guestbook'); //or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
// on fait une boucle qui va faire un tour pour chaque enregistrement  
$nbre = num_rows($sel_mail);  
echo $nbre;  

while($data = mysql_fetch_array($sel_mail))  
    {  
    // on affiche les informations de l'enregistrement en cours  
    $emails[]= $data['email'].', ';  
    }  
$sortie=implode(",",$emails);
echo $sortie;
ici, plus de probleme de virgule en trop ;)

par lux » 05 nov. 2006, 15:25

J'aime bien la solution de Cyrano, l'autre marche aussi.

J'ai fait
($long - 2)
car j'ai ajouté un espace derrière la virgule, c'est sympa on peut donc moduler le truc facilement 8)


Merci beaucoup :wink:

par jojolapine » 05 nov. 2006, 14:50

ou alors une autre solution, c'est de ne pas la mettre du tout cette variable...
$sel_mail = query('SELECT email FROM guestbook'); //or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
// on fait une boucle qui va faire un tour pour chaque enregistrement 
$nbre = num_rows($sel_mail); 
echo $nbre; 
$i=0;
while($data = mysql_fetch_array($sel_mail)) 
    { 
    // on affiche les informations de l'enregistrement en cours 
    $emails .= ($i>0 ? ',' : '').$data['email']; 
    echo $emails;  // ICI OK tout s'affiche bien 
    $i++;
    } 
echo $emails;
bon c'est vrai que on rajoute une variable, une incrémentation, donc je sais pas ce qui est le plus optimisé, mais ça doit se tenir, après utilise la solution que tu comprend le mieu :wink:

par Cyrano » 05 nov. 2006, 14:43

à partir du résultat de strlen() tu peux définir une sortie sans le dernier caractère, exemple :
<?php
$chaine = "Une chaine quelconque se terminant par une virgule,";
/* On détermine le nombre de caractères de la chaine */
$long = strlen($chaine);
/* On recrée une chaine à partir de l'original moins le dernier caractère */
$sortie = substr($chaine, 0, ($long - 1));
/* On affiche le résultat */
echo("<p>". $sortie ."</p>");
?>

par lux » 05 nov. 2006, 14:31

Attention toutefois, à la fin de ta chaines tu auras une virgule en trop
Bonjour

Je cherche le moyen de me débarrasser de la dernière virgule ? Une idée comment je dois m'y prendre ?

par Orni » 21 juin 2006, 16:57

Je vous l'accorde, la différence est faible, mais tant qu'à prendre des habitudes autant en prendre de bonnes dès le début et déclarer ses variables avant de les utiliser :)
+1 :lol:

par Ryle » 21 juin 2006, 16:05

Polémiquons !!! :)

Juste une petite rectification : "ca n'est pas nécessaire en php"

Je vous l'accorde, la différence est faible, mais tant qu'à prendre des habitudes autant en prendre de bonnes dès le début et déclarer ses variables avant de les utiliser :)

par guilt92 » 21 juin 2006, 15:41

J'ajouterais également qu'il faudrait déclarer $emails en dehors de la boucle while, sinon la variable n'existe que dans le-dit while.
Loin de moi l idée de susciter la polémique mais ca n'est pas vrai en php...

Le code par exemple :
<?php
$i=0;
while($i<10)
	{
	if(!isset($test)) $test="";
	$test.= "".$i;
    $i++;
	}
echo $test;
?>
fonctionne très bien...

par Orni » 21 juin 2006, 15:17

Ca peut servir à d'autres Image

par sasg » 21 juin 2006, 15:14

Merci de t'inquieter pour moi Orni, mais je l'avais rajoute :)

POST RESOLU

par Orni » 21 juin 2006, 15:12

J'ajouterais également qu'il faudrait déclarer $emails en dehors de la boucle while, sinon la variable n'existe que dans le-dit while.

par sasg » 21 juin 2006, 14:24

Réponse S rapide precise, c'est comme ca que j'aime phpfrance :D .

et tout ca pour un malheureux point :?

pour guilt92, le for est un reste d'un autre essai de boucle :wink:

Merci a vous deux