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

Langage PHP Discussion :

Tester une condition résultant d'une string


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 73
    Par défaut Tester une condition résultant d'une string
    Bonjour.

    Désolé pour le titre peu clair mais je ne savais pas trop quoi mettre.

    Plutôt que d'exposer mon problème je poste un script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $cond = " < 2";
    $nums = array(1, 2, 3, 4);
    foreach($nums as $num)
    {
    	if ($num . $cond)
    	{
    		echo $num . $cond;
    	}
    }
    ?>
    Ce qui donne :
    1 < 2
    2 < 2
    3 < 2
    4 < 2
    Merci pour votre aide.

  2. #2
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    Effectivement la condition est toujours vérifié (et je suppose que c'est ça ton problème) parce qu'en fait (je pense) que php procéde d'abord à la concaténation des deux string ($num . $cond) qui donne une seule string (par exemple "1 < 2"). Ensuite il évalue cette string. Elle n'est pas vide, donc la condition est vérifié.

    est ce que ceci pourrait te convenir?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $cond = "2";
    $nums = array(1, 2, 3, 4);
    foreach($nums as $num)
    {
    	if ($num <  $cond)
    	{
    		echo $num . $cond;
    	}
    }
    ?>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 73
    Par défaut
    En effet.

    Le problème est que j'utilise dans mon script plusieurs conditions : "< 11" et "> 10". J'ai donc besoin d'intégrer < ou > dans ma condition.

  4. #4
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    salut,
    j'ai pensé à une astuce...
    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
    27
    28
    <?php
    $cond = "<2";
    $nums = array(1, 2, 3, 4);
     
    function myfunction($str1,$str2){
    	$op = $str2{0};
    	switch($op){
    		case "<":
    			if ($str1 < $str2{1}) return true;
    			break;
    		case ">":
    			if ($str1 > $str2) return true;
    			break;
    		default:
    			return false;
    	}
    	return false;
    }
     
     
    foreach($nums as $num)
    {
    	if (myfunction($num,$cond))
    	{
    		echo $num . $cond."<br>";
    	}
    }
    ?>
    Il existe sûrement une meilleure méthode...
    J'avais pensé à eval, mais je ne sais pas trop...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 73
    Par défaut
    En fait je pensais aussi à une fonction de type eval() mais ton astuce est une solution.

    Je ne mets pas Resolu tout de suite au cas où il en existerait une autre.

    Je te remercie pour ton astuce.

  6. #6
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    Exact, avec eval() tu as très bien pensé
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?php
    $cond = " < 2";
    $nums = array(1, 2, 3, 4);
     
     
    foreach($nums as $num)
    {
    $chaine = "echo ($num $cond)?\"$num $cond\":\"\";";
     
    	if (eval($chaine)) {}
     
    }
     
    ?>

  7. #7
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    le if est-il indispensable?
    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
    $cond = " < 2";
    $nums = array(1, 2, 3, 4);
     
     
    foreach($nums as $num)
    {
    $chaine = "echo ($num $cond)?\"$num $cond\":\"\";";
     
    	eval($chaine);
     
    }
     
    ?>

  8. #8
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    non il est totalement inutile

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 73
    Par défaut
    Merci à vous deux.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 73
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function add_val_cond($num)
    {
    	global $cond;
    	$cond .= '[' . $num . ']';
    }
     
    $test[1][2] = 'ok';
    $cond = '$test[1]';
    add_val_cond(2);
    echo $cond;
    echo '<br>';
    eval("echo $cond;");
    Tout simplement.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/01/2010, 21h34
  2. strucure d'une table résultant d'une requete
    Par dbuweb dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/07/2006, 13h51
  3. Mettre une condition if dans une requete sql
    Par Sardonnen dans le forum Oracle
    Réponses: 4
    Dernier message: 24/03/2006, 11h25
  4. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24
  5. comment vérifier qu'une table esclave vérifie une condition?
    Par loikiloik dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/04/2004, 16h48

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