6
votes

Analysez les opérations mathématiques avec PHP

Je travaille sur un projet où j'ai besoin de faire une fonction qui analysera les 4 opérations de mathématiques par défaut (addition, soustraction, multiplication, division). Ce serait bien si la fonction pouvait analyser les opérations entre parenthèses.

Donc, il faut que la fonction vérifie d'abord les opérations de multiplication et de division (devrait vérifier cela après analysser toutes les opérations entre parenthèses s'ils existent et que la règle devrait s'appliquer aux opérations de support [le plus gros problème est que les crochets peut contenir des crochets]). Après avoir effectué toutes les opérations de multiplication et de division, il devrait faire toutes les opérations d'addition et de soustraction. Le nombre final doit être renvoyé par des fonctions.

Une autre belle addition serait une chaîne de réégyvance qui vérifiera les opérations mathématiques.

Merci d'avance!


6 commentaires

Pour votre problème de parenthèse: vous devriez apprendre la récursion pour apprendre la récursion


La "question" commence par "Je travaille sur un projet" mais devient rapidement une liste de souhaits de fonctionnalités.


Cela ressemble à un problème de devoirs pour moi. Est-ce un problème de devoirs?


Peut-être que Math Parser aidera Stackoverflow.com/Questtions/1015242/...


@Fivell: Pourquoi ne soumettez-vous pas cela comme une réponse?


@Sander maréchal: l'a fait


6 Réponses :


2
votes

Vous pouvez utiliser eval () ( AVERTISSEMENT STRUT>: Soyez sûr de ce qui entre dans une Opération mathématique et non à une autre entrée arbitraire ou code PHP).

$input = "3 + (4 - 2 * 8) / 2";

eval('$result = ' . $input . ';');

echo "The result is $result";


2 commentaires

Je me demande s'il serait possible de faire un EVAL () 100% sûr pour des expressions mathématiques si vous deviez vérifier tout caractère non reconnu; I.e. Preg_replace ('~ [^ 0-9. () - + * /] ~' ',' ', $ entrée);


@ Martijn cela fonctionnerait probablement et est également la méthode utilisée dans la réponse acceptée.



0
votes

Les expressions régulières ne sont pas la réponse ici; Je suggère d'utiliser un arborescence d'expression où tous les nœuds terminaux sont des constantes ou des variables, et le reste des nœuds sont des opérateurs. Par exemple, 2 + 3 * 4 devient: xxx

puis, vous évaluez l'expression à l'aide d'un Profondeur-PREMIER TRAVERSAL . En PHP, il est difficile de représenter des arbres, mais vous pouvez utiliser une bibliothèque intégrée en tant que commentateur suggéré ou les représenter à l'aide d'un tableau associatif de tableaux.


0 commentaires

6
votes

Ceci devrait être assez sécurisé: xxx


1 commentaires

Que dois-je devoir changer si je dois aussi soutenir des chiffres flottants aussi? /



2
votes

Il y avait un problème similaire
Comment évaluer la formule passée sous forme de chaîne dans PHP? Vous pouvez essayer d'utiliser la classe: évaluer les mathématiques des cours de PHP http://www.phpclasses.org/package/ 2695-PHP-Safey-Évaluez-Évaluez-Mathematical-Expressions.html


1 commentaires

Réponse uniquement



0
votes

Si vous voulez un analyseur de mathématiques vraiment sûr, EVAL ne le fera pas. bcparserphp peut le faire. Il est mis en œuvre dans PHP et n'utilise pas EVAL, il est donc très sécurisé.


0 commentaires