PHP - 尝试通过减一来获取数组项 $array[$var - 1]

5 浏览
0 Comments

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);

0
0 Comments

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类,因为它提供了更多的功能,可以简化日期操作。

0