IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Opérateurs + - * / dans un array


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut Opérateurs + - * / dans un array
    Bonjour,

    Je tente de faire mettre les opérateurs de calcul + - * /, dans un array pour les réutiliser.
    (Le but est que l'utilisateur créé ses propres calculs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php 
    $operateurs='+|-|*|/';
    $operateurs=explode('|',$operateurs);
    $val_1=1;
    $val_2=2;
    // Test 1 
    echo $val_1.$operateurs[2].$val_2;
    // Test 2 
    echo number_format($val_1.$operateurs[2].$val_2,2);
    // Test 3 
    echo $val_1$operateurs[2]$val_2;
    // Test 4 
    echo number_format($val_1$operateurs[2]$val_2,2);
    ?>
    Je ne sais pas si c'est possible.
    Ps: les recherches, Qwant ou autre, renvoient aux opérateurs de comparaison.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- il existe une solution avec eval() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo eval( "echo $val_1$operateurs[0]$val_2;" ).'<br />';
    echo eval( "echo $val_1$operateurs[1]$val_2;" ).'<br />';
    echo eval( "echo $val_1$operateurs[2]$val_2;" ).'<br />';
    echo eval( "echo $val_1$operateurs[3]$val_2;" ).'<br />';
    Mais ATTENTION !
    Attention
    La construction de langage eval() est très dangereuse car elle autorise l'exécution de code PHP arbitraire.
    Son utilisation est vivement déconseillée.
    Si vous avez soigneusement vérifié qu'il n'y a pas d'autres options que de l'utiliser, gardez une attention toute particulière à ne pas y passer de données provenant d'un utilisateur sans les avoir précédemment validées minutieusement.
    2- Donc, autant préférer une fonction simple et SURE :

    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
    function calculate($val_1, $val_2, $operateur)
    {
    	switch($operateur)
    	{
    		case '+':
    			return $val_1 + $val_2;
    			break;
    		case '-':
    			return $val_1 - $val_2;
    			break;
    		case '*':
    			return $val_1 * $val_2;
    			break;
    		case '/':
    			return $val_1 / $val_2;
    			break;
    		default:
    			return false;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo calculate($val_1, $val_2, $operateurs[0]).'<br />';
    echo calculate($val_1, $val_2, $operateurs[1]).'<br />';
    echo calculate($val_1, $val_2, $operateurs[2]).'<br />';
    echo calculate($val_1, $val_2, $operateurs[3]).'<br />';

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut
    Merci jreaux62,

    La solution du switch est une bonne idée,

  4. #4
    Invité
    Invité(e)
    Par défaut
    Oui,

    d'autant que tu peux ajouter d'autres opérateurs : %, racine carrée,.... (ce qu'on peut trouver sur une "calculette").

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Autre solution, utiliser un tableau associatif dont les clefs sont les symboles des opérateurs et les valeurs les fonctions correspondantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ops = [
        '+' => function ($a, $b) { return $a + $b; },
        '-' => function ($a, $b) { return $a - $b; },
        '*' => function ($a, $b) { return $a * $b; },
        '/' => function ($a, $b) { return $a / $b; } // TODO: tester que $b est non nul
    ];
     
    echo $ops['+'](10, 5); // 15

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 257
    Par défaut
    Belle idée aussi !

    Faut que je m'y penche.

    Ps: je revois toutes mes requêtes sql grace au post:
    https://www.developpez.net/forums/d1...pdo-securisee/

    ET developpez.net

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XML] mettre les valeurs XML dans un array
    Par yodark dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 05/01/2006, 17h35
  2. Simuler l'opérateur "*" dans les requêtes
    Par soso78 dans le forum Access
    Réponses: 3
    Dernier message: 29/11/2005, 10h42
  3. Copier dans un Array
    Par Goundy dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2005, 21h24
  4. Réponses: 5
    Dernier message: 18/11/2005, 22h11
  5. Insérer dans un array
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 29/03/2005, 09h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo