PHP - 尝试通过减一来获取数组项 $array[$var - 1]
PHP - 尝试通过减一来获取数组项 $array[$var - 1]
我在弄清如何通过$variable - 1
获取数组项方面遇到了一些问题。\n我想做的事情是:\n我有一个包含一个月中天数的数组\n
$monthsArray = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
\n我有一个表示月份的变量\n
$monthOfDeparture = mb_substr($departureDate, 3, 4);
\n它的值可以是01表示一月等等。\n我试图通过以下方式获取正确的月份\n
$theMonth = $monthsArray[$monthOfDeparture - 1]
\n实际上我得到的是出发月份,即3月(31),而不是2月(28),如果$monthOfDeparture = 03
。\n任何帮助将不胜感激。\n提供的代码:请注意$arrivalDate
和$departureDate
的格式是23-02-21
(dd-mm-yy)\n
$arrivalDateNumber = mb_substr($arrivalDate, 0, 1); $departureDateNumber = mb_substr($departureDate, 0, 1); $monthOfArrival = mb_substr($arrivalDate, 3, 4); $monthOfDeparture = mb_substr($departureDate, 3, 4); $monthsArray = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if( $departureDateNumber < $arrivalDateNumber) { $depNumTwo = $monthsArray[$monthOfDeparture - 1]; $lodgingNights = $depNumTwo - $arrivalDateNumber + $departureDateNumber; $pay = $lodgingNights * $price_per_night; }else{ $lodgingNights = $departureDateNumber - $arrivalDateNumber; $pay = $lodgingNights * $price_per_night; }
\n编辑\n我的逻辑有错误。我想要做的是:\n
// 如果出发日期的天数大于到达日期的天数 if( $departureDateNumber < $arrivalDateNumber) { // 获取到达月份的天数 $arrNumTwo = $monthsArray[$monthOfArrival]; // 用户将停留的天数:到达月份的总天数 - 到达日期 + 下个月的天数 $lodgingNights = $arrNumTwo - $arrivalDateNumber + $departureDateNumber; $pay = $lodgingNights * $price_per_night; }else{ $lodgingNights = $departureDateNumber - $arrivalDateNumber; $pay = $lodgingNights * $price_per_night; }
\n我现在遇到的问题是,我得到了一个提示:在$arrNumTwo = $monthsArray[$monthOfArrival];
的代码行中,出现了未定义的索引:02-2。我猜这是因为这段代码$monthOfArrival = mb_substr($arrivalDate, 3, 4);
,虽然我不知道为什么它不仅仅获取第3和第4个字符。\n编辑nmb xy。\n我弄清楚了我对substr的理解有误。需要使用$monthOfArrival = mb_substr($arrivalDate, 3, 2);
。
PHP中的问题是通过数组索引减一来获取数组项。问题的原因是逻辑错误和对substr函数的误解。解决方法是使用cal_days_in_month函数或DateTime类。cal_days_in_month函数返回指定月份的天数,而DateTime类提供了比较和计算日期之间差异的功能。
对于cal_days_in_month函数的使用,可以调用cal_days_in_month(CAL_GREGORIAN, $theMonth, $year)来获取指定月份的天数。为了正确计算年份,可能需要对$year进行+2000的操作。
对于DateTime类的使用,可以使用DateTime::createFromFormat函数将日期字符串转换为DateTime对象。例如,可以使用$arrival = DateTime::createFromFormat("d-m-y", $arrivalDate)将到达日期转换为DateTime对象。然后可以使用比较运算符(如$departure < $arrival)来比较两个日期,并使用diff方法获取它们之间的天数差异。
虽然问题的解决方法略有不同,但推荐使用DateTime类,因为它提供了更多的功能,可以简化日期操作。