这是我的代码,用于将日期从选定日期设置为自动设置日期,不包括周末(周六和周日)和假期(我将其放入数据库中):
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个项目。
有人可以帮我吗?
答案 0 :(得分:1)
包含字符串的变量包含该字符串,除非您进行类似evaluating it as source code的操作(这非常危险,否则它将继续被视为字符串)。 )。
所以,如果您有:
$foo = ["1", "2", "3"];
然后您将得到一个包含三样东西的数组。
但是如果您有:
$string = '"1", "2", "3"';
$foo = [$string];
然后您将拥有一个包含一个东西的数组:一个字符串。
与写作相同:
$foo = ['"1", "2", "3"'];
如果要使用字符串数组,请查看代码的这一行:
$array_date_2 = '"'.implode('", "' , $arr) . '"';
它将字符串数组转换为单个字符串。
请勿这样做,因为那不是您想要的。
只需使用您在$arr
中已经拥有的值即可。
答案 1 :(得分:-1)
您有一个名为“ $ array_date_2”的变量,并尝试使用以下代码为其分配字符串:
$array_date_2 = '"'.implode('", "' , $arr) . '"';
执行“内爆”后,此分配将导致以下结果:
$array_date_2 = ""2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17"";
请注意字符串开头和结尾的引号。即使您在“回显”字符串时没有看到它们,字符串也被这些引号引起来。 PHP不允许在没有用引号引起来的情况下使用String,否则将引发Parse Error。 所以最后您没有像这样的字符串:
"2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17"
但更像是
""2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17""
现在,您还尝试通过将字符串和特殊字符连接在一起来创建数组。但是,这不是PHP的工作方式。
如果您想从字符串中“创建”函数,或者通常将字符串评估为PHP代码,则需要使用“ eval ”,但我强烈建议反对。
仅供参考,如果您使用 eval ,则代码应如下所示:
eval("\$holidayDays = [".$array_date_2 ."];");