2010-01-03 10 views
3
// today is 03 Jan 2009 
$datemonth = (int) date("md"); 

if($datemonth == 0103){ 
    echo "Match"; 
} else { 
    echo "Not a match"; 
} 

Je reçois Not a match comme résultat. Est-ce que 0103 n'est pas égal à 103 lorsqu'on le compare en entier? Dans cette situation, je peux utiliser if($datemonth == 103) pour le comportement prévu. Mais pourquoi la logique échoue? Un zéro principal n'a aucune valeur dans un entier, non?confusion PHP de comparaison

Répondre

9

Lorsque vous commencez un littéral numérique avec un zéro, cela signifie que le nombre est en octal (base 8). Vous vouliez probablement que ce soit un nombre décimal (base 10). 0103 en octal est égal à 67 en décimal. Déposez le premier zéro et votre code devrait fonctionner. Voir la documentation de PHP pour plus de details on numeric literals.

+2

+1 Hé, ça me fait toujours ça. Bonne prise. – cletus

+2

+1 Damn octals! – missingfaktor

+0

Merci! Cela m'a définitivement! – Nirmal