这是我的代码,用于将日期从选定日期设置为自动设置日期,不包括周末(周六和周日)和假日(我将其放入数据库):
function number_of_working_dates($from, $days) {
/* get holiday from database */
include('includes/config.php');
$sss = "SELECT tanggal_awal FROM libur_nasional GROUP BY tanggal_awal ASC";
$qqq = mysqli_query($konek,$sss);
$arr = array();
while ( $tam = mysqli_fetch_array($qqq)) {
$date = $tam['tanggal_awal'];
$reformat_date = date("Y-m-d", strtotime($date));
$arr[] = $reformat_date;
}
$array_date_2 = '"'.implode('", "' , $arr) . '"';
输出 implode()
是日期列表:
"2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17"
然后继续:
$holidayDays = [$array_date_2];
//$holidayDays = ["2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17"]
$from = new DateTime($from);
$dates = [];
$dates[] = $from->format('Y-m-d');
**echo count($holidayDays);**
while ($days) {
$from->modify('+1 day');
if (!in_array($from->format('N'), $workingDays)) continue;
if (in_array($from->format('Y-m-d'), $holidayDays)) continue;
if (in_array($from->format('*-m-d'), $holidayDays)) continue;
$dates[] = $from->format('Y-m-d');
$days--;
}
return $dates;
}
当我使用“count”计算“holidaydays”数组时,它只显示1项,但是当我像在注解行那样硬编码日期列表时,它工作并显示4项。
有人能帮我吗?
2条答案
按热度按时间tvokkenx1#
您有一个名为“$array\u date\u 2”的变量,并试图用以下代码为其分配一个字符串:
在执行“内爆”后,此赋值将导致以下结果:
注意字符串开头和结尾的引号。即使你在“回音”时看不到它们,字符串也会被这些引号所环绕。php不允许字符串没有括在引号中,它将抛出一个解析错误。所以最后你没有一个字符串,比如:
但更像是
现在您还尝试通过将字符串和特殊字符连接在一起来创建数组。但这不是php的工作方式。
如果您想从字符串中“创建”一个函数,或者通常将字符串作为php代码进行求值,那么您需要使用“eval”,但我强烈建议您不要使用它。
仅供参考,如果使用eval,代码应如下所示:
xxslljrj2#
包含字符串的变量包含该字符串,它将继续被视为字符串,除非您将其作为源代码进行求值(这是非常危险的)。
如果你有:
然后你有一个数组,里面有三样东西。
但如果你有:
然后你有一个数组,里面有一个东西:字符串。
与书写相同:
如果您想拥有一个字符串数组,请查看以下代码行:
将字符串数组转换为单个字符串的。
不要那样做,因为那不是你想要的。
只要使用你已经拥有的价值
$arr
.