内爆值不算作数组

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 ."];");