Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/03/2008, 12h08   #1
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 70
Points : 25
Points : 25
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 :
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 :
Citation:
1 < 2
2 < 2
3 < 2
4 < 2
Merci pour votre aide.
jpascal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 12h44   #2
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
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 :
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;
	}
}
?>
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 12h48   #3
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 70
Points : 25
Points : 25
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.
jpascal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 14h53   #4
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
salut,
j'ai pensé à une astuce...
Code :
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...
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 15h01   #5
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 70
Points : 25
Points : 25
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.
jpascal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h02   #6
Membre éprouvé
 
Avatar de SphynXz
 
Développeur Web
Inscription : mars 2008
Messages : 439
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2008
Messages : 439
Points : 474
Points : 474
Exact, avec eval() tu as très bien pensé
Code php :
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)) {}
 
}
 
?>
__________________
I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
Pour détourner un avion, il faut monter dedans - Frédéric beigbeder
SphynXz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h29   #7
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
le if est-il indispensable?
Code :
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);
 
}
 
?>
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2008, 16h31   #8
Membre éprouvé
 
Avatar de SphynXz
 
Développeur Web
Inscription : mars 2008
Messages : 439
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2008
Messages : 439
Points : 474
Points : 474
non il est totalement inutile
__________________
I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
Pour détourner un avion, il faut monter dedans - Frédéric beigbeder
SphynXz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2008, 14h25   #9
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 70
Points : 25
Points : 25
Merci à vous deux.
jpascal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2008, 17h50   #10
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 70
Points : 25
Points : 25
Code :
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.
jpascal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h42.


 
 
 
 
Partenaires

Hébergement Web