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?

7 réponses

1 2
Avatar
Jean-Matthieu D.
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.
Non car chque dossier est bien différencié par la suite... et que faire

une catégorie ralongerai juste le code.


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.
Merci


a++;
JG
JMD



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?


Merci pour vos réponses !

Maintenant, si je veux faie le même genre :

if(($dossier != 'news') && ($dossier !='processeurs') && ($dossier !='etc'))

?

Merci !

JMD

(la syntaxe !in_array($dossier, $tableau) equivaut à if (... != .... or
... != ....) non ? )

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


if(strpos($dossier, '#') === false && strpos($MaListe, "#$dossier#") !==
false)
plutot non ?

--
Vincent

Avatar
christophe.meresse

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).


Entièrement d'accord avec toi, je ne faisait que répondre à l'envie
de raccourcir la syntaxe. C'est vrai que je ne le ferait pas comme ca
dans mon propre code et j'aurais du le préciser. Je suis certainement
trop nostalgique des GFA-punchs ;)

Avatar
Vincent Planchenault
Vincent Lascaux wrote:
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é...



Je ne pense pas. A mon avis, in_array() utilise la même méthode que
l'accès direct à un élément d'un tableau (une hash-table ?) pour savoir
si cet élément est présent dans le tableau.

En fait, je pense même que cette solution est légèrement plus couteuse
que celle utilisant in_array() :

- dans le cas de in_array(), on recherche un élément dans le tableau
- dans le second cas, on recherche un élément dans le tableau (si on
n'utilise pas d'index numérique pour accéder à un tableau, cela revient
à faire une recherche...), puis on récupère une valeur. Cette
récupération n'existe pas dans la solution in_array().

Maintenant, pour être vraiment sûr, il faudrait bencher, ou trouver
quelqu'un qui maîtrise le source de PHP pour nous éclairer.


Avatar
christophe.meresse
Je ne pense pas. A mon avis, in_array() utilise la même méthode que
l'accès direct à un élément d'un tableau (une hash-table ?) pour savoir
si cet élément est présent dans le tableau.

En fait, je pense même que cette solution est légèrement plus couteuse
que celle utilisant in_array() :

- dans le cas de in_array(), on recherche un élément dans le tableau
- dans le second cas, on recherche un élément dans le tableau (si on
n'utilise pas d'index numérique pour accéder à un tableau, cela revient
à faire une recherche...), puis on récupère une valeur. Cette
récupération n'existe pas dans la solution in_array().

Maintenant, pour être vraiment sûr, il faudrait bencher, ou trouver
quelqu'un qui maîtrise le source de PHP pour nous éclairer.


Voici le petit bout de code utilisé par la fonction in_array (Je l'ai
juste legerement simplifié en supprimant la partie utilisée par la
fonction php array_search qui utilise la même methode dans le code de
PHP mais renvoie la clé au lieu de true)

target_hash = HASH_OF(*array);
zend_hash_internal_pointer_reset_ex(target_hash, &pos);

while (zend_hash_get_current_data_ex(target_hash, (void **)&entry,
&pos) == SUCCESS) {
is_equal_func(&res, *value, *entry TSRMLS_CC);
if (Z_LVAL(res)) {
RETURN_TRUE;
}
zend_hash_move_forward_ex(target_hash, &pos);
}

Par contre si quelqu'un de plus au courant peut expliquer ca serait
bien car je me pose des questions:
HASH_OF est un #define qui renvoie "value.ht" du pointeur sur le
tableau.
Mais j'ai un peu de mal à voir quand est mise à jour ce value.ht
(Peut-etre à chaque affectation d'une valeur dans le taleau ?)
J'imagine que c'est une hashtable sur les valeurs et pas sur les clés
(?), alors dans ce cas pourquoi faire ce test "is_equal_func(&res,
*value, *entry TSRMLS_CC);", normalement dès que
zend_hash_get_current_data_ex renvoie SUCCESS ca devrait être bon non
?

Merci et bonne nuit :)
Christophe

Avatar
christophe.meresse
C'est bon vous pouvez oublier ma question sur le "value.ht". Je crois
que je viens de comprendre
Il se peut que plusieurs valeurs differentes aient la même valeur de
hashage donc il faut tout de même faire la comparaison.

Enfin pour completer l'analyse de Vincent:

- dans le second cas, on recherche un élément dans le tableau (si on
n'utilise pas d'index numérique pour accéder à un tableau, cela revient
à faire une recherche...)


Je ne crois pas que cela soit vrai car PHP utilise aussi probablement
une hashtable dans ce cas.

Conclusion, je pense que la difference entre les deux méthode ne doit
vraiment pas être grande (ca doit se jouer uniquement à quelques
instructions et dans les deux cas on a une recherche en O(1) si les
fonctions de hashage sont performantes). Ca ne pourrait devenir
interessant de se pencher plus en détail sur la difference que dans le
cas ou l'on bouclerait sur ce genre de test.

A+
Christophe

1 2