Bonjour !

A force de vouloir nous simplifier la vie, PHP finit aussi par agir différemment de ce qu'on peut attendre de lui. Mais peut être que je ne connais juste pas la parade...

Bien qu'il soit peu utile de le rappeler, une assignation en php renvoie la valeur booléene du membre de gauche.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$b = array('pomme', 'poire', 'tomate');
if($a = in_array('pomme', $b))
   echo (int)$a;
Ce code affiche '1'.

C'est cool, même si ça sert a rien ici.

Problème ! La valeur de retour d'une assignation '=' est convertie implicitement en booléen. Pratique la plupart du temps.

Mais dans mon cas, ça casse :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$b = array('pomme', 'poire', 'tomate');
if($a = array_search('pomme', $b))
   echo (int)$a;
Rien... Car array_search me renvois l'integer '0', qui une fois casté en booleen vaut False.

Est-ce que quelqu'un aurait une solution ? (sans rajouter de ligne hein, pas compliqué de passer outre ce soucis, c'est juste pour le fun)

La moins pire solution que j'ai trouvé pour l'instant c'est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$b = array('pomme', 'poire', 'tomate');
if($a = (string)array_search('pomme', $b)||$a==='0')
   echo (int)$a;
Ou alors pour ce cas plus spécifique, il existe peut être une autre fonction de tableau qui permet de combiner un array search et un in_array sans poser ce soucis ?

Je sais, pas très productif comme recherche de code, mais pour le coup, j'aurais bien aimé avoir un opération d'assignation qui me renvoit un booléen avec vérification du type. '====' un jour ?