Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在foreach循环中设置从数组到日期的字符串格式?_Php_Multidimensional Array - Fatal编程技术网

Php 如何在foreach循环中设置从数组到日期的字符串格式?

Php 如何在foreach循环中设置从数组到日期的字符串格式?,php,multidimensional-array,Php,Multidimensional Array,我有以下代码,可以完美地处理预格式化的日期时间数组: foreach ($ranges as $range) { while ($range['start'] <= $range['end']) { $date = $range['start']->format('Y-m-d'); $dates[$date] = (isset($dates[$date]) ? $dates[$date] : 0) + 1; 1;//define new $da

我有以下代码,可以完美地处理预格式化的日期时间数组:

foreach ($ranges as $range) {
    while ($range['start'] <= $range['end']) {
        $date = $range['start']->format('Y-m-d');
        $dates[$date] = (isset($dates[$date]) ? $dates[$date] : 0) + 1; 1;//define new $dates array
        $range['start']->modify('+1 day');
    }
}

$sold_out = array_filter($dates, function($n) { return $n >= 7; });

echo implode(',', array_keys($sold_out));
foreach($ranges作为$range){
而($range['start']格式('Y-m-d');
$dates[$date]=(isset($dates[$date])?$dates[$date]:0)+1;1;//定义新的$dates数组
$range['start']->modify('+1天');
}
}
$salled_out=array_filter($dates,function($n){return$n>=7;});
回音内爆(“,”,数组键($salled_out));
但是,我的生产数组不是像DateTime那样“预格式化”

在链接的Fiddle中,您可以看到我们链接到一个本机数组,其中的值为“strings”

这将生成一个“异常:调用字符串上的成员函数format()”
在我们浏览日期的线路上:
$range['start']->modify('+1天')

要测试,请将阵列目标从$ranges更改为$ranges2:
示例:foreach($ranges2作为$range){

问题是不能正确地将值设置为DateTime吗


目标:输出逗号分隔的日期,这些日期在提供的日期范围内与x个时间相交。

您可以使用
DateTime
createFromFormat()
将这些值转换为
DateTime

DateTime::createFromFormat('Y-m-d','2019-02-18');

foreach($ranges2作为$range){
$range['start']=DateTime::createFromFormat('Y-m-d',$range['start']);
$range['end']=DateTime::createFromFormat('Y-m-d',$range['end']);
而($range['start']格式('Y-m-d');
$dates[$date]=(isset($dates[$date])?$dates[$date]:0)+1;1;//定义新的$dates数组
$range['start']->modify('+1天');
}
}

希望这有帮助,

请记住,我们正在处理变量,无法更改每个日期都是字符串的本机数组($ranges2=array(…)。
foreach ($ranges2 as $range) {
    $range['start'] = DateTime::createFromFormat('Y-m-d', $range['start']);
    $range['end'] = DateTime::createFromFormat('Y-m-d', $range['end']);
    while ($range['start'] <= $range['end']) {
        $date = $range['start']->format('Y-m-d');
        $dates[$date] = (isset($dates[$date]) ? $dates[$date] : 0) + 1; 1;//define new $dates array
        $range['start']->modify('+1 day');
    }
}