php数组结构问题

$arr = [
     'date'=>[],
     'num' =>[]
];

//开始日期,结束日期
$startDate = '2017-07-25';  $stopDate = '2017-08-08';


//根据开始日期,和结束日期 往$arr里插入数据,得到结果

array(5) {
  ["num"]=>
  array(15) {
    [0]=>
    int(0)
    [1]=>
    int(0)
    [2]=>
    int(0)
    [3]=>
    int(0)
    [4]=>
    int(0)
    [5]=>
    int(0)
    [6]=>
    int(0)
    [7]=>
    int(0)
    [8]=>
    int(0)
    [9]=>
    int(0)
    [10]=>
    int(0)
    [11]=>
    int(0)
    [12]=>
    int(0)
    [13]=>
    int(0)
    [14]=>
    int(0)
  }
  ["date"]=>
  array(15) {
    [0]=>
    string(5) "07-25"
    [1]=>
    string(5) "07-26"
    [2]=>
    string(5) "07-27"
    [3]=>
    string(5) "07-28"
    [4]=>
    string(5) "07-29"
    [5]=>
    string(5) "07-30"
    [6]=>
    string(5) "07-31"
    [7]=>
    string(5) "08-01"
    [8]=>
    string(5) "08-02"
    [9]=>
    string(5) "08-03"
    [10]=>
    string(5) "08-04"
    [11]=>
    string(5) "08-05"
    [12]=>
    string(5) "08-06"
    [13]=>
    string(5) "08-07"
    [14]=>
    string(5) "08-08"
  }
}

怎么做到呢? 描述的不够清楚吗? 就是给一个开始的日期和一个结束的日期,根据这个日期往一个数组里面插入数据. 譬如开始时间是2017-07-11; 结束时间是2017-08-11; date数组里面就是
[0]=>2017-07-11 [1]=>2017-07-12 .... [?]=>2017-08-11; 就这样.

阅读 3.1k
4 个回答

主要是php内置的日期类的应用

$startDate = new DateTime('2017-07-11');//起始日期
$endDate = new DateTime('2017-08-11');//结束日期
$interval = new DateInterval('P1D');//间隔1天
$perionds = new DatePeriod($startDate, $interval, $endDate);//日期段
foreach ($perionds as $date) {//按照间隔时间来遍历日期段
    echo $date->format("Y-m-d"), PHP_EOL;
}

伪代码

$datestart = new DateTime($startdate);
$datestop = new DateTime($stopdate);
$oneday = DateInterval::createFromDateString('1 day');

$d = new DateTime($datestart);
while ($d < $datestop) {
    $arr['date'][] = $d;
    $arr['num'][] = ...;
    $d += $oneday;
}

这个数据结构很糟糕啊,不如改一下:

$arr = [
    [
        "date"=>$date,
        "num"=>$num
    ]
];

$startDate = '2017-07-25'; $stopDate = '2017-08-08';
$begin = strtotime($startDate);
$end = strtotime($stopDate);
$diff = ($end -$begin)/(24 60 60)+1;
$arr = array();
for($i=0;$i< $diff; $i++){

    $arr['num'][$i] = 0;
    $arr['date'][$i] = date('Y-m-d', $begin);
    $begin += 24*60*60;

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题