内爆值不算作数组
implode value does not count as an array
所以这是我的代码,用于将日期从选定日期设置为自动设置日期,不包括周末(星期六和星期日)和假期(我将其放入数据库):
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 个项目。
有人可以帮助我吗?
包含字符串的变量包含 那个字符串 并且它将继续被视为 一个字符串 除非你做类似 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
中已有的值即可。
您有一个名为“$array_date_2”的变量,并尝试使用以下代码为其分配一个字符串:
$array_date_2 = '"'.implode('", "' , $arr) . '"';
这个赋值,在 "implode" 执行后,会产生以下结果:
$array_date_2 = ""2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17"";
注意字符串开头和结尾的引号。即使您在 "echoing" 时看不到它们,字符串也包含在这些引号周围。 PHP 不允许没有用引号括起来的字符串,它会抛出一个解析错误。
所以最后你没有像这样的字符串:
"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 的工作方式。
如果您想 "create" 从 String 中提取一个函数,或者通常 将 String 计算为 PHP Code ,那么您需要使用 " eval" 但我强烈建议不要这样做。
仅供参考,如果你使用 eval 你的代码应该是这样的:
eval("$holidayDays = [".$array_date_2 ."];");
所以这是我的代码,用于将日期从选定日期设置为自动设置日期,不包括周末(星期六和星期日)和假期(我将其放入数据库):
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 个项目。
有人可以帮助我吗?
包含字符串的变量包含 那个字符串 并且它将继续被视为 一个字符串 除非你做类似 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
中已有的值即可。
您有一个名为“$array_date_2”的变量,并尝试使用以下代码为其分配一个字符串:
$array_date_2 = '"'.implode('", "' , $arr) . '"';
这个赋值,在 "implode" 执行后,会产生以下结果:
$array_date_2 = ""2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17"";
注意字符串开头和结尾的引号。即使您在 "echoing" 时看不到它们,字符串也包含在这些引号周围。 PHP 不允许没有用引号括起来的字符串,它会抛出一个解析错误。 所以最后你没有像这样的字符串:
"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 的工作方式。
如果您想 "create" 从 String 中提取一个函数,或者通常 将 String 计算为 PHP Code ,那么您需要使用 " eval" 但我强烈建议不要这样做。
仅供参考,如果你使用 eval 你的代码应该是这样的:
eval("$holidayDays = [".$array_date_2 ."];");