Différence simple/double guillemet avec un array

Différence simple/double guillemet avec un array - PHP - Programmation

Marsh Posté le 31-03-2011 à 10:01:29    

Bonjour,
 
J'ai tourné un peu en rond avant de trouver la solution, mais du coup, je ne me l'explique pas du tout. Voici le code qui posait problème (il est dans une boucle d'où le $i) :

Code :
  1. // les résultats sont corrects et s'affichent
  2. echo $result[$i]['lieux'] , ' : ', $result[$i]['nom'] , ' ' , $result[$i]['prenom'];
  3. // ici, dans le select s'affiche ceci : array['lieux']
  4. echo "<select name='lieux'><option>$result[$i]['lieux']</option></select>";


 
Du coup, cette méthode fonctionne

Code :
  1. echo '<select name="lieux"><option>'.$result[$i]['lieux'].'</option></select>';


 
Mais je ne sais pas trop pourquoi. J'ai pour habitude (bonne ou mauvaise?) d'écrire la partie html en double guillement, et les variables à l'intérieur sans guillement ni point, ce qui fonctionne. Mais pour les array, ça change?
 
Merci pour vos lumières !

Reply

Marsh Posté le 31-03-2011 à 10:01:29   

Reply

Marsh Posté le 31-03-2011 à 10:54:32    

C'est tout simple, l’interprétation des chaines effectué par php ne lui permet de traverser qu'un seul niveau de tableau.

Code :
  1. echo "blabla : $montab['plop']"; // ceci fonctionne si le tableau n'a qu'une seule dimension
  2. echo "blabla : $montab['plop']['ploup']";// ici php essayera d’interpréter seulement $montab['plop'] et fera une jolie parse error
 


A+


Message édité par _neko_ le 31-03-2011 à 10:55:55
Reply

Marsh Posté le 31-03-2011 à 12:15:19    

Merci pour ta réponse, seulement, je n'ai même pas d'erreur parse; est-ce dû au fait que j'utilise une variable pour le deuxième niveau?

Reply

Marsh Posté le 31-03-2011 à 14:43:52    

Non mais déjà à partir du moment où tu génères du code HTML qui n'est pas même de l'HTML... :o
Sérieusement, depuis quand on a le droit d'écrire des attributs entre simple quote en HTML ? :heink: C'est des doubles quotes, et donc ta questions ne se pose même plus...
 
Si on suit les recommandations de Zend et du W3C la seule syntaxe correcte est :
(cf. : http://php.net/manual/en/language.types.string.php)

Code :
  1. echo '<select name="lieux"><option>' . $result[$i]['lieux'] . '</option></select>';


 
Néanmoins tu pourrais aussi écrire :

Code :
  1. echo "<select name=\"lieux\"><option>{$result[$i]['lieux']}</option></select>";


Dès que la syntaxe est complexe, entre doubles quotes, les accolades aident.
 


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 31-03-2011 à 14:47:24    

Merci pour cette réponse, je me posais la question sur cette habitude, qui donc est mauvaise ! Et cool les accolades, je ne savais pas !

Reply

Marsh Posté le 02-04-2011 à 13:31:22    

MEI a écrit :

Non mais déjà à partir du moment où tu génères du code HTML qui n'est pas même de l'HTML... :o
Sérieusement, depuis quand on a le droit d'écrire des attributs entre simple quote en HTML ? :heink: C'est des doubles quotes, et donc ta questions ne se pose même plus...

Non mais, n'importe quoi!
On a toujours eu le droit, et ce depuis l'ancêtre de la syntaxe HTML, ie le SGML (et peut être même le GML) d'utiliser des simples ou des doubles quotes pour délimiter les valeurs d'un attribut.
 
Je suis pas un spécialiste de PHP, mais comme PHP est le fils batard de Perl et d'une serveuse web, voici ce qui se passe en perl:
my $variable = "TOTO";
print "toto vaut: ", $variable; #imprimera toto vaut: TOTO
print "toto vaut: $variable";   #imprimera toto vaut: TOTO
print 'toto vaut: $variable';    #imprimera toto vaut: $variable
 
Bref, la double quote fait qu'il y a remplacement des variables par leurs valeurs, tandis que la simple quote fait que tout est interprété comme du texte pur, sans interprétation.
Ce n'est pas limité aux variables: print "\n" va imprimer un retour à la ligne, tandis que print '\n' va imprimer un backslash et un n.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed