Bonjour,
me donne int 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php $expression="1*2"; var_dump(intval($expression)); ?>
La doc ne m'éclaire pas.
Si quelqu'un peut m'expliquer...
Merci
Bonjour,
me donne int 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php $expression="1*2"; var_dump(intval($expression)); ?>
La doc ne m'éclaire pas.
Si quelqu'un peut m'expliquer...
Merci
Salut,
https://www.php.net/manual/fr/langua...ic-strings.php , Le point 2 explique pourquoi vous avez 1 comme résultat.
Malheureusement cette partie de la doc n'est pas en français, il faut aussi comprendre l'expression régulière des chaînes numériques. Donc il ne faut pas être étonné d'avoir 2 comme résultat avec intval("2 ans").
Si le résultat attendu était 6 ce n'est pas comme ça qu'il faut s'y prendre
Tu demandes de convertir une variable de type chaîne en variable de type entier
Pour cela PHP récupère les premiers chiffres de la chaine
Avec intval('5678/0') tu aurais obtenu 5678
Bonjour, merci à vous deux,
Willy_k : j'attendais 2. En effet, il va falloir faire autrement...
Seb, je comprends, mais comme * est un opérateur et que le tout formait un calcul, je pensais que ça allait de soi pour php, mais apparemment non...
Tu ne demandes pas d'évaluer une expression mathématique mais de transtyper une valeur/variable![]()
j'avoue que "transtyper une valeur/variable" n'est pas très clair pour moi
j'aimerais bien l'évaluer quand même, cette $expression
je vais chercher du côté de la fonction eval() peut-être
J'ai trouvé quelquechose sur stack :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <?php $ma = "1*2"; if(preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE){ $operator = $matches[2]; switch($operator){ case '+': $p = $matches[1] + $matches[3]; break; case '-': $p = $matches[1] - $matches[3]; break; case '*': $p = $matches[1] * $matches[3]; break; case '/': $p = $matches[1] / $matches[3]; break; } echo $p; } ?>
Ou cet étonnant
qui fonctionne, mais je ne comprends pas pourquoi non plus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?php $ma ="print (1*2);"; eval($ma); ?>
je vais fouiller
merci en tout cas
Voilà, ce sont les deux méthodes existantes :
1. Création d'un analyseur
2. Utilisation de eval()
La 3e methode pourrait consister à essayer de se passer d'avoir ce genre de choses à faire![]()
J'entends bien mon cher Séb, mais quand on est un indécrassable béotien avec des grosses pattes comme moi, on rampe aussi bien dans le code que dans l'algorithme. Et dans les maths aussi d'ailleurs, puisqu'au départ je me suis retrouvé confronté à un problème de maths, une sorte de suite mathématique fractale dont je n'ai pas les connaissances suffisantes pour la résoudre en une formule.
Ceci dit, tu vois en t'en parlant, je me suis que j'aurais peut etre dû commencer par balancer la suite dans google.
Pas mal ça, je vais faire ça.
Merci de ton aide
Sinon j'ai trouvé un analyseur, une classe qui a résolu mon problème, en effet.
Ça m'embêtait de ne pas pouvoir stocker les résultats.
Mais je trouve quand même étonnant que les fonctions d'affichage fasse du transtypage puisqu'elles évaluent, et qu'on ne puisse pas en profiter. Ou alors on peut en profiter mais je ne sais pas comment faire.
Mais on est bien d'accord que ta formule est forcément dans une chaîne ?
Plus haut tu disais ne pas comprendre
Ceci revient en fait à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $ma ="print (1*2);"; eval($ma);
et là on manipule bien des numériques, pas de soucis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part print (1*2);
Certes Séb, mais je trouve quand même ça ambigu.
Echo ou print sont censées afficher, pas calculer. Afficher 1*2 et pas 2. Afficher un calcul devient ici afficher un résultat de calcul et pas afficher un calcul. On ne peut pas exactement dire que 1*2 soit un nombre.
Et ça veut dire aussi que print et echo reconnaissent une string mathématique en tant que telle, et que la fonction affichage aurait donc, elle, recours a un analyseur inclus dans le php...
P.S : j'ai découvert que ma formule mathématique relevait de ce qui s'appelle un parcours d'arbre... " un concept fondamental en algorithmique" selon wikipedia... quelle chose étrange...
C'est ce qu'il font. echo/print affiche le résultat de l'évaluation de l'expression donnée en paramètre.Echo ou print sont censées afficher, pas calculer.
L'instruction => echo
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo 123 * 2;
L'expression en paramètre => 123 * 2 composée de 2 entiers
Les types en PHP => https://www.php.net/types
C'est le cas quand tu demandes d'afficher le littéral "1*2" (une chaîne de caractères le cas échéant).Afficher 1*2 et pas 2.
Il faut bien distinguer ces 2 instructions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 echo "123 * 2"; // On affiche une expression littérale (chaîne de caractère) => Son évaluation donnera "123 * 2" echo 123 * 2; // On affiche une expression numérique, ici le résultat d'un calcul => Son évaluation donnera 246Non, quand l'expression est délimitée avec des " alors on a affaire à une chaîne de caractères, on affiche donc une chaîne de caractères, et la nature de ce qu'elle contient importe peu PHP.Afficher un calcul devient ici afficher un résultat de calcul et pas afficher un calcul. On ne peut pas exactement dire que 1*2 soit un nombre.
Wikipedia s'emballe, ça peut être une simple pile. Ceci dit une pile peut être représentée par un arbreP.S : j'ai découvert que ma formule mathématique relevait de ce qui s'appelle un parcours d'arbre... " un concept fondamental en algorithmique" selon wikipedia... quelle chose étrange...![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager