|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
Le 24/09/2007 19:49, Denis Beauregard a écrit :
> > 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. |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
John GALLET <john.gallet@wanadoo.fr> écrivait
news:Pine.LNX.4.44.0709241943570.25523-100000@ns2261.ovh.net: > 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 |
|
|
|
#11 |
|
Messages: n/a
Hébergeur: |
Denis Beauregard <denis.b-at-francogene.com.invalid@nospam.com.invalid>
écrivait news:p2tff312p9qu9snb17t1hq27403el44hur@4ax.com: > 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 |
|
|
|
#12 |
|
Messages: n/a
Hébergeur: |
John GALLET a écrit :
> 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. > C'est même plus pernicieux que ça car qd je trouve une fonction qui ressemble à une autre, je me demande si je ne fais pas une grosse erreur (de compréhension ou d'optimisation) en utilisant celle que je connais. |
|
|
|
#13 |
|
Messages: n/a
Hébergeur: |
Le 25 Sep 2007 07:40:04 GMT, Pascale <chaton.tigre+spam@alussinan.org>
écrivait dans fr.comp.lang.php: >Denis Beauregard <denis.b-at-francogene.com.invalid@nospam.com.invalid> >écrivait news:p2tff312p9qu9snb17t1hq27403el44hur@4ax.com: > >> 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é. Mon utilisation prévue est sans doute différente de la tienne. Ce que j'avais en tête, c'est pour une liste de liens dans une base de données, chaque lien appartenant à plusieurs catégories. Avec mon truc, je pourrais par exemple avoir sur une ligne ;arseneaux;arsenault;arsenaud;arseno; et trouver le lien avec plusieurs mots clés différents. Et ici, c'est sans importance que la chaine soit trouvée en partie. Pour une application de filtrage à partir d'une liste d'endroits, cela est à double tranchant. D'un côté, à partir de Saint-Denis, je trouverais Saint-Denis-sur-Richelieu, Saint-Denis de la Réunion, Saint-Denis-le-Vêtu, Saint-Denis-de-L'Houmée com Beurlay (Saint-Denis), etc. Donc, pour un moteur de recherche, c'est acceptable et même préférable. D'un autre côté, à partir de Paul*Champagne, je trouverais aussi Saint-Paul, Champagne mais aussi ;Saint-Paul;Saint-Martin;Champagne sur Mer; C'est une question d'utilisation que l'on veut en faire. Une application réelle contiendrait par exemple ;F01;F26;F38; Pour France, départements 01, 26 et 38. Denis |
|
|
|
#14 |
|
Messages: n/a
Hébergeur: |
Pascale a écrit :
(snip) > Gloups... un langage typé, ça veut dire quoi ? Les experts ne sont pas encore parvenus à une définition définitive et univoque à ce jour. Mais tout le monde ou presque s'accorde à considérer qu'un langage qui considère que '1' == 1 n'a pas vraiment un typage fort !-) |
|
|
|
#15 |
|
Messages: n/a
Hébergeur: |
Olivier Masson <sisemen@laposte.net> écrivait
news:46fa3f4a$0$32751$426a34cc@news.free.fr: > C'est même plus pernicieux que ça car qd je trouve une fonction qui > ressemble à une autre, je me demande si je ne fais pas une grosse erreur > (de compréhension ou d'optimisation) en utilisant celle que je connais. Aaaaaah... je me sens moins seule ! (-: -- Pascale |
|
|
|
#16 |
|
Messages: n/a
Hébergeur: |
Bruno Desthuilliers <bdesth.quelquechose@free.quelquepart.fr> écrivait
news:46fc03b7$0$21518$426a74cc@news.free.fr: > Les experts ne sont pas encore parvenus à une définition définitive et > univoque à ce jour. Mais tout le monde ou presque s'accorde à considérer > qu'un langage qui considère que '1' == 1 n'a pas vraiment un typage fort > !-) Arf© (o; -- Pascale |
|
![]() |
| Outils de la discussion | |
|
|