Problème boucle foreach et concaténation

Résolu/Fermé
Mpvio - 20 sept. 2016 à 10:33
 Mpvio - 20 sept. 2016 à 17:23
Bonjour,

Je voudrais afficher plusieurs paramètres à l'aide d'une boucle. Jusque là pas de problème je sais qu'il faut utiliser un foreach pour mon cas. En revanche, mon problème intervient quand cette boucle doit intervenir dans une chaîne de caractère. Il faudrait donc que j'arrive à concaténer correctement pour permettre de bien différencier ma boucle, le texte en dur et les variables à afficher :/

Voici l'erreur affichée : Parse Error: syntax error, unexpected 'foreach' (T_FOREACH)

Voici mon code :
"parameters": ['.
     foreach($parameters as $parameter){
          echo '{ "name": "'.$parameter.'", "value": "'.$parameter_value.'"},'.;}.'
]


2 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 sept. 2016 à 11:18
Bonjour,

Tu ne peux pas introduire directement en foreach au milieu d'une chaine de caractères....
Faut la faire à part....
un truc du genre :

foreach($parameters as $parameter){
    $strTmp .= '{ "name": "'.$parameter.'", "value": "'.$parameter_value.'"},';
}

echo '"parameters": ['. $strTmp.']';



0
Bonjour Jordane45,

Merci de ta réponse ! Cela fonctionne, en revanche cela me récupère seulement le dernier paramètre alors que normalement je devrais en récupérer 6 :/
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > Mpvio
20 sept. 2016 à 11:30
montres nous le code que tu as écris...
Tu as bien vu le point devant le égale dans ce que j'ai écrit ?
0
J'ai écris ce que tu m'as donné. J'avais juste enlevé le point car sinon cela me sort l'erreur : Undefined variable: strTmp

Le point sert à quoi ??

foreach($parameters as $parameter){
      $strTmp .= '{ "name": "'.$parameter.'", "value": "???"},';
}

"parameters": ['.$strTmp.']
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
20 sept. 2016 à 12:35
Le .= permet de combiner l'affectation la concaténation.
Pour résumer le code suivant :
$strTmp .= $parameter;

est équivalent au code suivant :
$strTmp = $strTmp . $parameter;


Il faut donc initialiser la variable $strTmp avant la boucle pour ne pas avoir d'erreur au premier tour de la boucle (car la variable $strTmp n'est pas initialisée) :
$strTmp = '';

foreach($parameters as $parameter){
      $strTmp .= '{ "name": "'.$parameter.'", "value": "???"},';
}
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
20 sept. 2016 à 12:37
Salut,

Il faudrait voir la structure de ton tableau $parameters mais le résultat que tu attends ressemble au format json. Dans ce cas l'utilisation de json_encode devrait faciliter le traitement.
Par exemple avec le tableau suivant :
$parameters = array('paramaters' => array(
        array('name' => 'param1', 'value' => 'value1'),
        array('name' => 'param2', 'value' => 'value2')
        )
    );

echo json_encode($parameters);
// {"paramaters":[{"name":"param1","value":"value1"},{"name":"param2","value":"value2"}]}


Bonne journée
0
Bonjour Pitet,

Merci beaucoup pour ta réponse !!
0