Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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 在数据中填写缺失的天数_Php_Time - Fatal编程技术网

Php 在数据中填写缺失的天数

Php 在数据中填写缺失的天数,php,time,Php,Time,我有一个如下所示的数组: $data = array( array('timestamp' => 1312776000, 'something' => 100), // data for 08.08.2011 array('timestamp' => 1312862400, 'something' => 120), // data for 09.08.2011 // ????????

我有一个如下所示的数组:

$data = array(
    array('timestamp' => 1312776000, 'something' => 100), // data for 08.08.2011
    array('timestamp' => 1312862400, 'something' => 120), // data for 09.08.2011
    //  ????????                                          // data for 10.08.2011
    array('timestamp' => 1313035200, 'something' => 160), // data for 11.08.2011
    array('timestamp' => 1313121600, 'something' => 180), // data for 12.08.2011
    array('timestamp' => 1313208000, 'something' => 200), // data for 13.08.2011
    //  ????????                                          // data for 14.08.2011
    //  ????????                                          // data for 15.08.2011
    //  ????????                                          // data for 16.08.2011
    //  ????????                                          // data for 17.08.2011
    array('timestamp' => 1313640000, 'something' => 300), // data for 18.08.2011
);
$outArray = array();
$lastTime = $data[0]['timestamp'] - 86400;
foreach($data as $values) {
    $dayDelta = ($values['timestamp'] - $lastTime)/86400;
    if ( $dayDelta != 1) {
        for ($i = $dayDelta-1; $i--; $i>0) {
            $pastDate = $values['timestamp'] - $i * 86400;
            $outArray[] = array('timestamp'=>$pastDate, 'something'=>0);
        }
    }
    $outArray[]=$values;
    $lastTime = $values['timestamp'];
}

如何识别“洞”并用“某物”=>0的子阵列填充它们?正如您所见,“漏洞”可能非常大,这就是为什么我自己无法解决这个问题的原因-我的算法只能填补微小的“漏洞”(如2011年8月10日,但不是2011年8月14日->2011年8月17日)。

您的数据似乎已排序,我猜您每天需要一个值。我采用了惰性的方法编写了一个新的输出数组,但是您可以将值附加到现有数组中,然后在最后按时间戳排序

我会这样做:

$data = array(
    array('timestamp' => 1312776000, 'something' => 100), // data for 08.08.2011
    array('timestamp' => 1312862400, 'something' => 120), // data for 09.08.2011
    //  ????????                                          // data for 10.08.2011
    array('timestamp' => 1313035200, 'something' => 160), // data for 11.08.2011
    array('timestamp' => 1313121600, 'something' => 180), // data for 12.08.2011
    array('timestamp' => 1313208000, 'something' => 200), // data for 13.08.2011
    //  ????????                                          // data for 14.08.2011
    //  ????????                                          // data for 15.08.2011
    //  ????????                                          // data for 16.08.2011
    //  ????????                                          // data for 17.08.2011
    array('timestamp' => 1313640000, 'something' => 300), // data for 18.08.2011
);
$outArray = array();
$lastTime = $data[0]['timestamp'] - 86400;
foreach($data as $values) {
    $dayDelta = ($values['timestamp'] - $lastTime)/86400;
    if ( $dayDelta != 1) {
        for ($i = $dayDelta-1; $i--; $i>0) {
            $pastDate = $values['timestamp'] - $i * 86400;
            $outArray[] = array('timestamp'=>$pastDate, 'something'=>0);
        }
    }
    $outArray[]=$values;
    $lastTime = $values['timestamp'];
}

您的数据似乎已排序,我猜您希望每天有一个值。我采用了惰性的方法编写了一个新的输出数组,但是您可以将值附加到现有数组中,然后在最后按时间戳排序

我会这样做:

$data = array(
    array('timestamp' => 1312776000, 'something' => 100), // data for 08.08.2011
    array('timestamp' => 1312862400, 'something' => 120), // data for 09.08.2011
    //  ????????                                          // data for 10.08.2011
    array('timestamp' => 1313035200, 'something' => 160), // data for 11.08.2011
    array('timestamp' => 1313121600, 'something' => 180), // data for 12.08.2011
    array('timestamp' => 1313208000, 'something' => 200), // data for 13.08.2011
    //  ????????                                          // data for 14.08.2011
    //  ????????                                          // data for 15.08.2011
    //  ????????                                          // data for 16.08.2011
    //  ????????                                          // data for 17.08.2011
    array('timestamp' => 1313640000, 'something' => 300), // data for 18.08.2011
);
$outArray = array();
$lastTime = $data[0]['timestamp'] - 86400;
foreach($data as $values) {
    $dayDelta = ($values['timestamp'] - $lastTime)/86400;
    if ( $dayDelta != 1) {
        for ($i = $dayDelta-1; $i--; $i>0) {
            $pastDate = $values['timestamp'] - $i * 86400;
            $outArray[] = array('timestamp'=>$pastDate, 'something'=>0);
        }
    }
    $outArray[]=$values;
    $lastTime = $values['timestamp'];
}

考虑的另一种方法:

$previous_d = false;
for($di=0; isset($data[$di]); $di++) {
    $d = $data[$di];
    if($previous_d && ($d['timestamp']-$previous_d['timestamp'])>86400) {
        $new_d = array('timestamp'=>$previous_d['timestamp']+86400,'something'=>0);
        array_splice($data,$di,0,array($new_d));
        $di--;
    }
    $previous_d = $d;
}

考虑的另一种方法:

$previous_d = false;
for($di=0; isset($data[$di]); $di++) {
    $d = $data[$di];
    if($previous_d && ($d['timestamp']-$previous_d['timestamp'])>86400) {
        $new_d = array('timestamp'=>$previous_d['timestamp']+86400,'something'=>0);
        array_splice($data,$di,0,array($new_d));
        $di--;
    }
    $previous_d = $d;
}

可以这样做:

$new=array();
$prev=重置($data);
而($record=reset($data)){
而($prev['timestamp']<$record['timestamp']-86400){
$prev['timestamp']+=86400;
$prev['something']=0;
$new[]=$prev;
}
$new[]=$record;
$prev=$record;
未设置($data[关键($data)]);
}
$data=$new;
回声';
var_导出(数据);
回声';

可以这样做:

$new=array();
$prev=重置($data);
而($record=reset($data)){
而($prev['timestamp']<$record['timestamp']-86400){
$prev['timestamp']+=86400;
$prev['something']=0;
$new[]=$prev;
}
$new[]=$record;
$prev=$record;
未设置($data[关键($data)]);
}
$data=$new;
回声';
var_导出(数据);
回声';

我认为有一个更短的解决方案。我会试着写下来。我认为有一个更短的解决方案。我会试着写下来。是的,你是对的‘某物’呈线性增长。但这只是一个例子,我把示例数据做成这样只是为了好玩。真实数据(网站Visior或adsense收入的数量)无法预测,因此您的方法将不起作用。好的,更新了代码,因此现在它也将零插入到“某物”中:-)是的,您是对的“某物”线性增加。但这只是一个例子,我把示例数据做成这样只是为了好玩。真实数据(网站Visior或adsense收入的数量)无法预测,因此您的方法将不起作用。好的,更新了代码,因此现在它也将零插入到“某物”:)