内爆值不算作数组

tpgth1q7  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(218)

这是我的代码,用于将日期从选定日期设置为自动设置日期,不包括周末(周六和周日)和假日(我将其放入数据库):

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项。
有人能帮我吗?

tvokkenx

tvokkenx1#

您有一个名为“$array\u date\u 2”的变量,并试图用以下代码为其分配一个字符串:

$array_date_2 = '"'.implode('", "' , $arr) . '"';

在执行“内爆”后,此赋值将导致以下结果:

$array_date_2 = ""2018-08-09", "2018-08-10", "2018-08-15", "2018-08-17"";

注意字符串开头和结尾的引号。即使你在“回音”时看不到它们,字符串也会被这些引号所环绕。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的工作方式。
如果您想从字符串中“创建”一个函数,或者通常将字符串作为php代码进行求值,那么您需要使用“eval”,但我强烈建议您不要使用它。
仅供参考,如果使用eval,代码应如下所示:

eval("\$holidayDays = [".$array_date_2 ."];");
xxslljrj

xxslljrj2#

包含字符串的变量包含该字符串,它将继续被视为字符串,除非您将其作为源代码进行求值(这是非常危险的)。
如果你有:

$foo = ["1", "2", "3"];

然后你有一个数组,里面有三样东西。
但如果你有:

$string = '"1", "2", "3"';
$foo = [$string];

然后你有一个数组,里面有一个东西:字符串。
与书写相同:

$foo = ['"1", "2", "3"'];

如果您想拥有一个字符串数组,请查看以下代码行:

$array_date_2 = '"'.implode('", "' , $arr) . '"';

将字符串数组转换为单个字符串的。
不要那样做,因为那不是你想要的。
只要使用你已经拥有的价值 $arr .

相关问题