Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Test conditionnel a rallonge !

17 réponses
Avatar
Jean-Matthieu D.
Salut à tous !

Une petite question : comment raccourcir la syntaxe suivante ?

if(($dossier == 'news') or ($dossier =='processeurs') or ($dossier =='etc'))

Car là je vais en rajouter encore pas mal et c'est lord comme syntaxe !

Merci beaucoup !

Jean-Matthieu D.
PS: je reposte ici car je ne connais pas la différence entre le alt.fr.*
et le fr.*. Quelqu'un peu peut-être aussi m'éclairer?

10 réponses

1 2
Avatar
Sylvain
Salut à tous !


Hello !

Une petite question : comment raccourcir la syntaxe suivante ?

if(($dossier == 'news') or ($dossier =='processeurs') or ($dossier
=='etc'))

Car là je vais en rajouter encore pas mal et c'est lord comme syntaxe !

Merci beaucoup !

Jean-Matthieu D.
PS: je reposte ici car je ne connais pas la différence entre le alt.fr.*
et le fr.*. Quelqu'un peu peut-être aussi m'éclairer?


ça dépend de se qu'il y a derriere. Imaginons que tu est une quatrième
condition; tu pourrais alors faire :

if (($dossier != 'ma_dernière_condition'))

Sinon, je ne vois pas.

Avatar
Vincent Planchenault
Jean-Matthieu D. wrote:
Salut à tous !

Une petite question : comment raccourcir la syntaxe suivante ?

if(($dossier == 'news') or ($dossier =='processeurs') or ($dossier
=='etc'))

Car là je vais en rajouter encore pas mal et c'est lord comme syntaxe !

Merci beaucoup !

Jean-Matthieu D.
PS: je reposte ici car je ne connais pas la différence entre le alt.fr.*
et le fr.*. Quelqu'un peu peut-être aussi m'éclairer?


Je vois au moins deux méthodes :

1. un switch :

switch ($dossier)
{
case 'news':
case 'processeurs':
case 'etc':
blablabla;
break;

default: // Aucun des cas ci-dessus
blablabla_le_retour;
break;
}

2. usage d'un tableau avec in_array :

$tableau = array('news', 'processeurs', 'etc');
if (in_array($dossier, $tableau))
{
blablabla;
}
else
{
blablabla_le_retour;
}

Avatar
christophe.meresse
Une petite question : comment raccourcir la syntaxe suivante ?

if(($dossier == 'news') or ($dossier =='processeurs') or ($dossier =='etc'))


Que penserais tu de:
if (strstr("|news|processeurs|etc|","|".$dossier."|"))

Le separateur choisi | peut bien sur être n'importe quoi du moment
qu'il ne fait pas partie des possibilités de $dossier.

Christophe

Avatar
dwojylac.nospam
Jean-Matthieu D. wrote:

Salut à tous !

Une petite question : comment raccourcir la syntaxe suivante ?

if(($dossier == 'news') or ($dossier =='processeurs') or ($dossier =='etc'))

Car là je vais en rajouter encore pas mal et c'est lord comme syntaxe !




$test = array('news', 'processeurs', 'etc');
if in_array($test, $dossier) {
suite

Merci beaucoup !
de rien

Jean-Matthieu D.
PS: je reposte ici car je ne connais pas la différence entre le alt.fr.*
et le fr.*. Quelqu'un peu peut-être aussi m'éclairer?
l'un est modéré, l'autre pas (le alt)

--
Dominique Wojylac
http://wojylac.free.fr

Avatar
Jerome
// Plus pratique
$categories = Array( 'news', 'processeurs', 'etc');
if( in_array( $dossier, $categories)){ ...

// Plus rapide??
$categories = "news|processeurs|etc";
if( preg_match("/^$categories$/", $dossier)) { ...

Je préfère la première solution plus clean et logique. Dans les deux
cas, il vaut mieux faire déclarer tes catégories dans une instruction
séparée pour éditer facilement.
Avatar
Bruno Desthuilliers
Salut à tous !

Une petite question : comment raccourcir la syntaxe suivante ?

if(($dossier == 'news') or ($dossier =='processeurs') or ($dossier
=='etc'))

Car là je vais en rajouter encore pas mal et c'est lord
Oh My !-)


comme syntaxe !



$tests = Array('news', 'processeurs', 'etc', ...);
if (in_array($dossier, $tests)) {
...
}

Ou, si tu a d'autres infos à stocker concernant les dossiers news,
processeurs etc (l'url par exemple):

$dossiers = Array('news' => '/news',
'processeurs' => '/procs',
'etc' => '/le_reste');

...

if (isset($dossiers[$dossier])) {
...
}

Avatar
Stephane Pineau
Le 30 Aug 2005 16:11:49 GMT, "Jean-Matthieu D."
écrivait:

Une petite question : comment raccourcir la syntaxe suivante ?

if(($dossier == 'news') or ($dossier =='processeurs') or ($dossier =='etc'))

Car là je vais en rajouter encore pas mal et c'est lord comme syntaxe !



Pas forcément la meilleure solution, mais je l'utilise dans de nombreux
langages et elle se révèle assez pratique, lisible et facile à mettre en
oeuvre pour les longues séries de comparaison...

$MaListe="#news#processeurs#etc1#etc2#";
if (strpos($MaListe, "#".$dossier."#")>=0)

La seule astuce est de bien séparer les valeurs à tester par un caractère
quelconque qui n'est pas compris dans les mots à comparer, et encadrer de
même la variable à tester .
C'est pour éviter les faux positifs : genre si $dossier="etc" , sans le
cadrage avec les # le retour serait >=0 puisque etc1 et etc2 existe, mais
pas etc tout court pourtant.

La secconde solution, est d'utiliser un case ou switch, en php par exemple
tu peux faire (et c'est plus propre que ma soluce ci-dessus) :

switch ($dossier) {
"news":
"processeurs":
"etc1":
"etc2":
echo "Mon traitement si $dossier est bien reconnu";
break;
default:
echo "Mon traitement si $dossier n'est pas reconnu";
}

Cordialement,
Stéph'


--
AcroDict : Dictionnaire francophone des acronymes informatiques
<URL:http://www.teaser.fr/~spineau/acrodict/>
PHP Page : Script PHP3 Gratuits (Forum, Gestionnaires BDD, etc..)
<URL:http://steph.pineau.free.fr/php/index.php>

Avatar
Vincent Lascaux
if(($dossier == 'news') or ($dossier =='processeurs') or ($dossier
=='etc'))


Que penserais tu de:
if (strstr("|news|processeurs|etc|","|".$dossier."|"))


Que c'est un peu bancal : ca se généralise mal (il faut un séparateur qui ne
soit présent nul par ailleurs), et surtout que tu n'écris pas vraiment ce
que tu signifies (moi je lis "si le texte situé après "|$dossier|" dans
"|news|processeurs|etc|"", ce qui est assez loin de l'expression de départ
qui se lit bien).

--
Vincent


Avatar
Vincent Lascaux
2. usage d'un tableau avec in_array :

$tableau = array('news', 'processeurs', 'etc');
if (in_array($dossier, $tableau))
{
blablabla;
}
else
{
blablabla_le_retour;
}


Je me suis souvent demandé si le code suivant ne serait pas plus rapide pour
un tableau $tableau raisonnablement grand :
$tableau = array('news'=>1, 'processeurs'=>1, 'etc'=>1);
if(isset($tableau[$dossier]))
{
blablabla;
}
else
{
blablabla_le_retour;
}

Je suppose que in_array vérifie les élements un par un alors que la
recherche dans le tableau se fait rapidement, par hashage de la clé...

--
Vincent

Avatar
John GALLET
Bonjour,

if(($dossier == 'news') or ($dossier =='processeurs') or ($dossier =='etc'))
Car là je vais en rajouter encore pas mal et c'est lord comme syntaxe !
Aux solutions proposées d'implémentation j'ajouterai une question de fond

et d'algorithmique relevant de l'analyse des données : si tous ces cas
sont traités en commun, pourquoi les différencier ? Ne pourrait-on pas
avantageusement les remplacer par une catégorie qu'ils composeraient ?
Seule la connaissance de ton application peut y répondre.

PS: je reposte ici car je ne connais pas la différence entre le alt.fr.*
et le fr.*. Quelqu'un peu peut-être aussi m'éclairer?


Oui, la FAQ de ce forum. http://faqfclphp.free.fr/ c'est dans le premier
chapitre.

a++;
JG

1 2