Note : ce comportement a été modifié en PHP 5.4.
Par défaut, in_array
utilise une comparaison libre ( ==
), ce qui signifie que les chaînes de caractères numériques sont converties en nombres et comparées comme des nombres. Avant PHP 5.4, si vous n'aviez pas assez de précision dans le type de virgule flottante de votre plate-forme, la différence était perdue et vous obteniez une mauvaise réponse.
Une solution consiste à activer strict
comparaison ( ===
) en passant un Boolean
pour in_array
:
$lead = "418176000000069007";
$diff = array("418176000000069003", "418176000000057001");
if ( in_array($lead, $diff, true) )
echo "Found";
else
echo "Not found";
Ensuite, les chaînes de caractères sont comparées comme des chaînes de caractères, sans coercition numérique. Cependant, cela signifie que vous perdez l'équivalence par défaut de chaînes comme "01234" et "1234".
Ce comportement a été signalé comme un bogue et corrigé en PHP 5.4. Les chaînes numériques sont toujours converties en nombres lorsqu'elles sont comparées à ==
mais seulement si la valeur de la chaîne correspond au type numérique de la plate-forme.
1 votes
J'ai obtenu Not Found sur PHP 5.3.6-13ubuntu3.6 avec Suhosin-Patch (cli) (construit : Feb 11 2012 03:26:01) (Linux Mint, mais je ne pense pas que cela importe). Comment essayez-vous de l'exécuter ? Environnement ? CLI/GCI ?, etc...
78 votes
Le fait que PHP est un langage cassé .
3 votes
Pouvez-vous le reproduire avec des chiffres qui ne sont pas des chiffres ?
1 votes
@gavriel : probablement 32-bit vs 64-bit ?
29 votes
@ThiefMaster Trop facile de critiquer. Veuillez fournir une réponse plutôt qu'une diatribe la prochaine fois :)
4 votes
@ClémentHerreman : Il y avait déjà de bonnes réponses ;)
0 votes
@ThiefMaster Ce lien ne pourrait pas mieux correspondre à mes pensées.
7 votes
Voici une entrée de bogue connexe : bugs.php.net/bug.php?id=54547 . C'est une lecture pleine d'humour.
1 votes
@Vinnyq12 Je suis content d'avoir abandonné ce navire il y a longtemps. Je ne peux pas croire qu'ils essaient de discuter si ce bug devrait être corrigé ou si c'est à dessein.
0 votes
Voir martin-thoma.com/php-a-strange-language/#Conversion_automatique