[PHP] Problème avec la boucle for et if
Jhon80
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
empty Messages postés 931 Statut Membre -
empty Messages postés 931 Statut Membre -
Bonjour,
j'essaie de mettre le résultat d'une boucle dans la condition d'un if, je m'explique
PHP:
$string = $_GET['v'];
$ligne = 0;
$ligneafaire = 5;
$nbligne= $ligne + $ligneafaire;
for ($i=$ligne; $i<$nbligne; $i++) {
if ($i == $nbligne - 1) {
$texte = "(substr($string, $i, 1) == 1)";
}else {
$texte = "(substr($string, $i, 1) == 1)&&";
}echo $texte;
}
if ($texte) { echo "UN DES CHIFFRE A 1"; } else { echo "UN DES CHIFFRE A 0"; }
J'obtient avec ma boucle
Code:
(substr(00000000000000000000, 0, 1) == 1)&&(substr(00000000000000000000, 1, 1) == 1)&&(substr(00000000000000000000, 2, 1) == 1)&&(substr(00000000000000000000, 3, 1) == 1)&&(substr(00000000000000000000, 4, 1) == 1)
et j'aimerais que dans le if qu'il suit apparaissent ceci
Code:
if ((substr(00000000000000000000, 0, 1) == 1)&&(substr(00000000000000000000, 1, 1) == 1)&&(substr(00000000000000000000, 2, 1) == 1)&&(substr(00000000000000000000, 3, 1) == 1)&&(substr(00000000000000000000, 4, 1) == 1))
Voila mon problème en espérant que cela soit possible.
Merci d'avance.
j'essaie de mettre le résultat d'une boucle dans la condition d'un if, je m'explique
PHP:
$string = $_GET['v'];
$ligne = 0;
$ligneafaire = 5;
$nbligne= $ligne + $ligneafaire;
for ($i=$ligne; $i<$nbligne; $i++) {
if ($i == $nbligne - 1) {
$texte = "(substr($string, $i, 1) == 1)";
}else {
$texte = "(substr($string, $i, 1) == 1)&&";
}echo $texte;
}
if ($texte) { echo "UN DES CHIFFRE A 1"; } else { echo "UN DES CHIFFRE A 0"; }
J'obtient avec ma boucle
Code:
(substr(00000000000000000000, 0, 1) == 1)&&(substr(00000000000000000000, 1, 1) == 1)&&(substr(00000000000000000000, 2, 1) == 1)&&(substr(00000000000000000000, 3, 1) == 1)&&(substr(00000000000000000000, 4, 1) == 1)
et j'aimerais que dans le if qu'il suit apparaissent ceci
Code:
if ((substr(00000000000000000000, 0, 1) == 1)&&(substr(00000000000000000000, 1, 1) == 1)&&(substr(00000000000000000000, 2, 1) == 1)&&(substr(00000000000000000000, 3, 1) == 1)&&(substr(00000000000000000000, 4, 1) == 1))
Voila mon problème en espérant que cela soit possible.
Merci d'avance.
A voir également:
- [PHP] Problème avec la boucle for et if
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Easy php - Télécharger - Divers Web & Internet
- Idm for mac - Télécharger - Téléchargement & Transfert
- Instagram for pc - Télécharger - Divers Communication
- Expert php pinterest - Télécharger - Langages
7 réponses
Bonjour
Je ne suis pas sûr d'avoir compris ce que tu veux, mais je pense que c'est
if (eval($texte)) {...
mais tu auras peut-être une surprise, je pense qu'il te manque des ' (ou des " ) autour de tes chaînes de 000000..
Je ne suis pas sûr d'avoir compris ce que tu veux, mais je pense que c'est
if (eval($texte)) {...
mais tu auras peut-être une surprise, je pense qu'il te manque des ' (ou des " ) autour de tes chaînes de 000000..
non, ce sont les ' qui te manquent. le 1er paramètre de substr doit être une chaîne, donc entouré de ', comme je te l'avais dit. Et si tu les as mis, tu as peut être oublié le ; à la fin de ton expression, à l'intérieur de l'expression évaluée.
Voila j'ai essayer avec les ' et les ; mais rien n'y fait.
$string = $_GET['v'];
$ligne = 0;
$ligneafaire = 5;
$nbligne= $ligne + $ligneafaire;
for ($i=$ligne; $i<$nbligne; $i++) {
if ($i == $nbligne - 1) {
$texte = "(substr('$string', $i, 1); == 1)";
}else {
$texte = "(substr('$string', $i, 1); == 1)&&";
}echo $texte."<br><br>";
}
if(eval($texte)) { echo "UN DES CHIFFRE A 1"; } else { echo "UN DES CHIFFRE A 0"; }
J'ai dut faire une erreur ailleurs mais bon je découvre cette fonction :)
$string = $_GET['v'];
$ligne = 0;
$ligneafaire = 5;
$nbligne= $ligne + $ligneafaire;
for ($i=$ligne; $i<$nbligne; $i++) {
if ($i == $nbligne - 1) {
$texte = "(substr('$string', $i, 1); == 1)";
}else {
$texte = "(substr('$string', $i, 1); == 1)&&";
}echo $texte."<br><br>";
}
if(eval($texte)) { echo "UN DES CHIFFRE A 1"; } else { echo "UN DES CHIFFRE A 0"; }
J'ai dut faire une erreur ailleurs mais bon je découvre cette fonction :)
Bonsoir,
J'ai essayé avec ce code :
J'ai mis des commentaires.
Et sur l'écran, j'ai :
UN DES CHIFFRE A 1
Je sais pas trop à quoi sert ton programme, donc je ne sais pas ce qu'il faut obtenir.
J'ai essayé avec ce code :
<?php
$string = "vjoifj"; // Pour tester
$ligne = 0;
$ligneafaire = 5;
$nbligne= $ligne + $ligneafaire;
$texte=""; // J'ai rajouté ça
for ($i=$ligne; $i<$nbligne; $i++) {
if ($i == $nbligne - 1) {
$texte .= "(substr('$string', $i, 1); == 1)"; // Un . après le $texte
}else {
$texte .= "(substr('$string', $i, 1); == 1)&&"; // Un . après le $texte
}echo $texte."<br><br>";
}
if($texte) { echo "UN DES CHIFFRE A 1"; } else { echo "UN DES CHIFFRE A 0"; }
?>
J'ai mis des commentaires.
Et sur l'écran, j'ai :
UN DES CHIFFRE A 1
Je sais pas trop à quoi sert ton programme, donc je ne sais pas ce qu'il faut obtenir.
Adenpra, je crois que tu n'as pas compris la différence qu'il y a entre if ($texte) et if (eval ($texte)).
Jhon80, Adenora a raison pour les . de $texte .=
Et tu as mis les ; n'importe où.
D'après ton programme, tu essayes d'évaluer (si tu n'avais pas oublié les ".")
Qu'est ce que ces ; viennent faire au milieu de l'expression ? C'est à la fin qu'il en faut, pas au milieu
De plus, si tu étais allé voir le manuel PHP pour l'instruction eval, tu aurais vu qu'il faut mettre un return si tu veux obtenir le résultat que tu recherches.
Et pourquoi distinguer dans ta boucle la dernière boucle des autres ? Tu ajoutes systématiquement ton expression avec && sans te poser de questions, quand tu as fini tu enlèves les deux derniers caractères.
Mais surtout, pourquoi utiliser une méthode aussi tordue pour faire ce test ? Pourquoi ne pas tester la présence d'un un à chaque boucle tout simplement, au lieu de fabriquer du code pour l'exécuter plus tard ?
Jhon80, Adenora a raison pour les . de $texte .=
Et tu as mis les ; n'importe où.
D'après ton programme, tu essayes d'évaluer (si tu n'avais pas oublié les ".")
(substr('$string', $i, 1); == 1)&&(substr('$string', $i, 1); == 1)
Qu'est ce que ces ; viennent faire au milieu de l'expression ? C'est à la fin qu'il en faut, pas au milieu
De plus, si tu étais allé voir le manuel PHP pour l'instruction eval, tu aurais vu qu'il faut mettre un return si tu veux obtenir le résultat que tu recherches.
Et pourquoi distinguer dans ta boucle la dernière boucle des autres ? Tu ajoutes systématiquement ton expression avec && sans te poser de questions, quand tu as fini tu enlèves les deux derniers caractères.
Mais surtout, pourquoi utiliser une méthode aussi tordue pour faire ce test ? Pourquoi ne pas tester la présence d'un un à chaque boucle tout simplement, au lieu de fabriquer du code pour l'exécuter plus tard ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai juste fait copier-coller de son code, j'ai pas regardé les fautes. ;(
Et j'ai testé, if (eval ($texte)) et ça ne fonctionne pas.
Et j'ai testé, if (eval ($texte)) et ça ne fonctionne pas.
Désolé si tu t'es sentie offensée, ça n'était pas mon intention. C'était juste pour rappeler que jhon80 avait besoin d'utiliser eval pour faire exécuter un code créé dynamiquement, ce qui semblait être son intention. Même si je dis plus loin qu'à mon avis créer du code est un moyen tordu pour obtenir le résultat recherché
if (eval ($texte)) marche très bien. Je l'ai testé aussi. Mais je savais que ça allait marcher, c'est dans le manuel PHP qui a beaucoup plus souvent raison que les témoignages qu'on trouve dans les forums :-D
Mais tu as tout à fait raison pour les points qui manquaient pour concaténer $texte .=
if (eval ($texte)) marche très bien. Je l'ai testé aussi. Mais je savais que ça allait marcher, c'est dans le manuel PHP qui a beaucoup plus souvent raison que les témoignages qu'on trouve dans les forums :-D
Mais tu as tout à fait raison pour les points qui manquaient pour concaténer $texte .=
Met tes résultat dans un tableau au lieu de faire :
if ($i == $nbligne - 1) {
$texte = "(substr($string, $i, 1) == 1)";
}else {
$texte = "(substr($string, $i, 1) == 1)&&";
}echo $texte;
}
fais
if ($i == $nbligne - 1) {
$texte []= "(substr($string, $i, 1) == 1)";
}else {
$texte []= "(substr($string, $i, 1) == 1)&&";
}echo implode("", $texte);
}
et puis
if (implode("", $texte)) { echo "UN DES CHIFFRE A 1"; } else { echo "UN DES CHIFFRE A 0"; }
J'ai mis en gras les changements ;-)
if ($i == $nbligne - 1) {
$texte = "(substr($string, $i, 1) == 1)";
}else {
$texte = "(substr($string, $i, 1) == 1)&&";
}echo $texte;
}
fais
if ($i == $nbligne - 1) {
$texte []= "(substr($string, $i, 1) == 1)";
}else {
$texte []= "(substr($string, $i, 1) == 1)&&";
}echo implode("", $texte);
}
et puis
if (implode("", $texte)) { echo "UN DES CHIFFRE A 1"; } else { echo "UN DES CHIFFRE A 0"; }
J'ai mis en gras les changements ;-)
Parse error: parse error in C:\Program Files\wamp\www\test/test.php(17) : eval()'d code on line 1
Peut être ai je mal place le code ?