我遇到了一些代码问题:
else if ($IDKood[3] . $IDKood[4] == 08) {
$Month = "August";
}
else if ($IDKood[3] . $IDKood[4] == 09) {
$Month = "September";
}
基本上如果2个数字等于给定数字,我希望它输出一个月,这导致所有月份。 一切都运行良好,直到08和09号,我似乎无法解决它。 据我所知,这与php本身有关,我试图将数字放在字符串和整数中无济于事。
答案 0 :(得分:1)
PHP中的整数文字在 octal 中,如果它以前导零开头。敲掉领先的零,你就可以超过七!
来自the manual:
要使用八进制表示法,请在数字前面加上0(零)。
此外,您似乎在将字符串与数字进行比较。如果$ IDKood是一个字符数组,那么也许你应该进行字符串比较:
if ($IDKood[3] . $IDKood[4] == '09') {
..虽然正如ishegg观察到的那样,只要你敲掉领先的零点,implicit conversion from string to integer就可以了:
if ($IDKood[3] . $IDKood[4] == 9) {
说了这么多,如果您只是将一个数字转换为月份名称,可能会better ways to do it。
$dateObj = DateTime::createFromFormat('!m', (int) ($IDKood[3] . $IDKood[4]));
$monthName = $dateObj->format('F');
答案 1 :(得分:1)
虽然@MattGibson已经给出了正确的(好吧,它似乎是iMO)回答者,但我只是想指出有一种更好的方法来实现它想要实现的目标。
第一种方式:$months = [...,'08'=>"August", "09"=>"September",...];
// then
$Month = $months[$IDKood[3] . $IDKood[4]];
// no need for all the elseifs
为了让它更好,请从$IDKood[3] . $IDKood[4]
中创建一个int:
$monthIndex = intval($IDKood[3] . $IDKood[4]);
// now you can use the built in dateTime-class to get the string for this month.