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

[Debutant] Comparaison

16 réponses
Avatar
Pascale
Bonjour à tous,

Désolée si la question est niveau neuneu, mais je trouve pas la réponse. Je
cherche simplement à savoir si une valeur se trouve parmi une liste.
Je pourrais bien sûr écrire :

if (($pays=='France') OR ($pays=='Allemagne') OR ($pays=='Italie) OR [...]

...
Mais y a-t-il moyen d'abréger un peu (j'ai toute une liste de pays) ? J'ai
essayé :

if ($pays==('France' OR 'Allemagne' OR 'Italie'))

mais comme je m'y attendais, ça ne marche pas.
Je n'ai pas trouvé de réponse dans le manuel PHP... Y en a-t-il une ?
--
Pascale

10 réponses

1 2
Avatar
Claude
Le plus simple serait d'avoir les pays dans une table et de faire une
requete.

Bonjour à tous,

Désolée si la question est niveau neuneu, mais je trouve pas la réponse. Je
cherche simplement à savoir si une valeur se trouve parmi une liste.
Je pourrais bien sûr écrire :

if (($pays=='France') OR ($pays=='Allemagne') OR ($pays=='Italie) OR [...]

...
Mais y a-t-il moyen d'abréger un peu (j'ai toute une liste de pays) ? J'ai
essayé :

if ($pays==('France' OR 'Allemagne' OR 'Italie'))

mais comme je m'y attendais, ça ne marche pas.
Je n'ai pas trouvé de réponse dans le manuel PHP... Y en a-t-il une ?


Avatar
Mickael Wolff

mais comme je m'y attendais, ça ne marche pas.
Je n'ai pas trouvé de réponse dans le manuel PHP... Y en a-t-il une ?

if ($pays==('France' OR 'Allemagne' OR 'Italie'))


Une astuce consiste à utiliser un tableau :

if(in_array($pays, array('France', 'Allemagne', 'Italie'))
{
/* code ici */
}

ou encore d'utiliser la structure switch :

switch($pays)
{
case 'France' :
case 'Allemagne' :
case 'Italie' :
/* code ici */
break ;
default:
}

Ça dépendra aussi de la logique qu'il y a derrière.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Avatar
Stephan Peccini
Sur fr.comp.lang.php, Pascale s'est exprimé ainsi :

if ($pays==('France' OR 'Allemagne' OR 'Italie'))

mais comme je m'y attendais, ça ne marche pas.
Je n'ai pas trouvé de réponse dans le manuel PHP... Y en a-t-il une ?


Peut-être que cela correspond à l'attente (mais je ne sais pas si c'est le
plus efficace pour répondre à la question) :
http://www.php.net/manual/fr/function.in-array.php

--
Stéphan Peccini
Les photos : <URL:http://photonature.fr>
Les Pyrénées : <URL:http://photonature.fr/pyrenees>
Le blog : <URL:http://pyrenees.peccini.fr>

Avatar
Olivier Miakinen

Désolée si la question est niveau neuneu, mais je trouve pas la réponse. Je
cherche simplement à savoir si une valeur se trouve parmi une liste.
Je pourrais bien sûr écrire :

if (($pays=='France') OR ($pays=='Allemagne') OR ($pays=='Italie) OR [...]

[...]
Je n'ai pas trouvé de réponse dans le manuel PHP... Y en a-t-il une ?


<http://fr2.php.net/switch>

Contrairement au C, en PHP on peut faire un switch sur des chaînes de
caractères.

switch ($pays) {
case 'France' :
case 'Allemagne' :
case 'Italie' :
$continent = 'Europe';
break;

case 'Niger' :
case 'Nigéria' :
$continent = 'Afrique';
break;

default :
echo "Ce pays n'est pas pris en compte";
$continent = null;
break;
}

Avatar
Pascale
Stephan Peccini écrivait
news::

Peut-être que cela correspond à l'attente (mais je ne sais pas si
c'est le plus efficace pour répondre à la question) :
http://www.php.net/manual/fr/function.in-array.php


Oui oui et re-oui, le temps que ma question soit publiée j'étais tombée moi
aussi sur in_array qui correspond parfaitement à ce que je veux. Pourtant
j'avais bien cherché avant de poster...

Merci à tous et je vous fais toutes mes excuses de vous avoir fait chercher
pour rien.
--
Pascale

Avatar
Denis Beauregard
Le 24 Sep 2007 15:14:43 GMT, Pascale <chaton.tigre+
écrivait dans fr.comp.lang.php:

Bonjour à tous,

Désolée si la question est niveau neuneu, mais je trouve pas la réponse. Je
cherche simplement à savoir si une valeur se trouve parmi une liste.
Je pourrais bien sûr écrire :

if (($pays=='France') OR ($pays=='Allemagne') OR ($pays=='Italie) OR [...]

...
Mais y a-t-il moyen d'abréger un peu (j'ai toute une liste de pays) ? J'ai
essayé :

if ($pays==('France' OR 'Allemagne' OR 'Italie'))

mais comme je m'y attendais, ça ne marche pas.
Je n'ai pas trouvé de réponse dans le manuel PHP... Y en a-t-il une ?


En plus du in_array proposé, il y a aussi les strstr et stristr
http://ca.php.net/manual/fr/function.strstr.php

if (!stristr(';France;Allemagne;Italie;',$i))

Un avantage, c'est de trouver un mot incomplet. Par exemple, cela
trouverait allemagn. C'est aussi un inconvénient pour la même raison.
Pour ce qui est de la vitesse, je pense que la différence est trop
petite pour qu'on en tienne compte. Par contre, si la liste est très
longue, le in_array serait préférable.

À vous de voir.


Denis

Avatar
John GALLET
Bonsoir/jour,

Pourtant j'avais bien cherché avant de poster...


S'il y a bien une caractéristique donnant un avantage énorme de PHP sur
d'autres plateformes, c'est la richesse de ses API natives, en particulier
les fonctions de gestion de strings et de tableaux. Il est rare qu'on ne
dispose pas directement de ce dont on a besoin, au pire en combinant deux
ou trois fonctions existantes.

C'est à double tranchant, car il y a en a tellement qu'on s'y perd. Y
compris des trucs inutilement compliqués comme par exemple array_walk(),
qui permet de passer 5 bonnes minutes à se gratter le neurone devant le
man en ne comprenant strictement rien à ce qu'on lit alors qu'un bête
foreach() fait aussi bien le boulot.

Là aussi, in_array() peut dans certains cas être remplacé par in
array_key_exists() n'est qu'un bon vieux if(isset(...)) si on joue pas
avec le NULL de php. Et si on a envie de se re-demander si php est ou non
un langage typé, on peut jouer avec array_search().

a++;
JG

Avatar
Olivier Miakinen

En plus du in_array proposé, il y a aussi les strstr et stristr
http://ca.php.net/manual/fr/function.strstr.php

if (!stristr(';France;Allemagne;Italie;',$i))


Pour que le test soit fait dans le même sens que celui qu'utilisait
Pascale, il ne faut pas le « ! » du début.

Et pour prévenir le cas où cette technique serait réutilisée avec des
chaînes pouvant commencer par "0", je ferais même :
if (stristr(';France;Allemagne;Italie;', $i) !== FALSE)

Un avantage, c'est de trouver un mot incomplet. Par exemple, cela
trouverait allemagn. C'est aussi un inconvénient pour la même raison.


Oui. Par exemple si on veut chercher "Niger" dans une liste qui contient
"Nigeria" sans accent. Cela dit, on peut adapter la technique comme ceci
pour ne trouver que les mots complets :

if (stristr(';France;Allemagne;Italie;', ";$i;") !== FALSE)

L'inconvénient principal de cette méthode, à mon humble avis, est que le
code en devient de moins en moins lisible. Personnellement, le switch
aurait ma préférence.

Avatar
Pascale
John GALLET écrivait
news::

S'il y a bien une caractéristique donnant un avantage énorme de PHP
sur d'autres plateformes, c'est la richesse de ses API natives, en
particulier les fonctions de gestion de strings et de tableaux. Il est
rare qu'on ne dispose pas directement de ce dont on a besoin, au pire
en combinant deux ou trois fonctions existantes.


Exact !

C'est à double tranchant, car il y a en a tellement qu'on s'y perd. Y
compris des trucs inutilement compliqués comme par exemple
array_walk(), qui permet de passer 5 bonnes minutes à se gratter le
neurone devant le man en ne comprenant strictement rien à ce qu'on lit
alors qu'un bête foreach() fait aussi bien le boulot.


Et oui ! Je me sens comme un apprenti inexpérimenté qui aurait à sa
disposition tous les outils d'un maître-artisan, et embarrassée de savoir
lequel ira le mieux pour ce que je veux faire... et quelquefois je trouve
facilement dans les exemples comment faire des trucs compliqués... mais pas
le truc simple que je cherche ! (-:

Là aussi, in_array() peut dans certains cas être remplacé par in
array_key_exists() n'est qu'un bon vieux if(isset(...)) si on joue pas
avec le NULL de php. Et si on a envie de se re-demander si php est ou
non un langage typé, on peut jouer avec array_search().


Gloups... un langage typé, ça veut dire quoi ?

--
Pascale

Avatar
Pascale
Denis Beauregard
écrivait news::

En plus du in_array proposé, il y a aussi les strstr et stristr
http://ca.php.net/manual/fr/function.strstr.php

if (!stristr(';France;Allemagne;Italie;',$i))

Un avantage, c'est de trouver un mot incomplet. Par exemple, cela
trouverait allemagn. C'est aussi un inconvénient pour la même raison.
Pour ce qui est de la vitesse, je pense que la différence est trop
petite pour qu'on en tienne compte. Par contre, si la liste est très
longue, le in_array serait préférable.

À vous de voir.


J'avais pensé à un truc un peu dans ce genre : concaténer mes noms de pays
pour en faire un seul champ et rechercher ensuite si je retrouver ma chaîne
de caractères à l'intérieur. Mais j'ai eu peur de problèmes tels que ceux
que tu décris, même si ma liste de pays actuelle ne présente pas
d'ambiguïté.

--
Pascale

1 2