首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

用php补全数组中的日期,该如何解决

2014-01-03 
用php补全数组中的日期//如图如果遇到这样的数组,如何去补齐数组中每一次的period值 缺少的月份让它补齐

用php补全数组中的日期
//如图如果遇到这样的数组,如何去补齐数组中每一次的period值 缺少的月份让它补齐 实现每一个大数组有12个月份的数组(因为有时候没有前半年 或后半年的月份),每一次的[period]值 补齐为从(201301~201312)的结构。

就是如从201305月开始那就补齐 01~04。如果从10月开始 补齐 01~09. 按月排序每个二维数组。

Array
(
    [0] => Array
        (
            [period] => 201303
            [out_count] => 383
        )

    [1] => Array
        (
            [period] => 201304
            [out_count] => 43
        )

    [2] => Array
        (
            [period] => 201306
            [out_count] => 2859
        )

    [3] => Array
        (
            [period] => 201307
            [out_count] => 251
        )

    [4] => Array
        (
            [period] => 201309
            [out_count] => 807
        )

)


//想得到
Array
(
    [0] => Array
        (
            [period] => 201301
            [out_count] => 0
        )

    [1] => Array
        (
            [period] => 201302
            [out_count] => 0
        )

    [2] => Array
        (
            [period] => 201303
            [out_count] => 0
        )

    [3] => Array
        (
            [period] => 201304
            [out_count] => 0
        )

    [4] => Array
        (
            [period] => 201305
            [out_count] => 0
        )

    [5] => Array
        (
            [period] => 201306
            [out_count] => 0
        )

    [6] => Array
        (
            [period] => 201307
            [out_count] => 0
        )

    [7] => Array
        (
            [period] => 201308
            [out_count] => 0
        )
   [8] => Array
        (
            [period] => 201309
            [out_count] => 0
        )

    [9] => Array
        (
            [period] => 201310
            [out_count] => 0


        )

    [10] => Array
        (
            [period] => 201311
            [out_count] => 0
        )

    [11] => Array
        (
            [period] => 201312
            [out_count] => 0
        )


)
[解决办法]
我的想法:首先Count(array())的个数,如果小于12,则从第一个字符串开始右截取其2位(比如201301的01),看其是否==01,如果不是,则自动添加从201301到该字符串,如果是,则同时右截取下一个字符串,并判断是否为上一字符串 1,如果是,则自动继续后面的,不是,则补齐中间空缺的字符串。于此类推。 中间可能需要用到字符串和数字转换的函数。
[解决办法]
补齐之后每个out_count都为0 了?
[解决办法]

$a = array(
  array('period' => 201303, 'out_count' => 383),
  array('period' => 201304, 'out_count' => 43),
  array('period' => 201306, 'out_count' => 2859),
  array('period' => 201307, 'out_count' => 251),
  array('period' => 201309, 'out_count' => 807),
);

$last = '';
foreach($a as $r) {
  while($last && $last < $r['period']) {
    $res[] = array('period' => $last, 'out_count' => 0);
    $last = date('Ym', $last = strtotime("+1 month {$last}01"));
  }
  $res[] = $r;
  $last = date('Ym', strtotime("+1 month {$r['period']}01"));
}
print_r($res);
Array
(
    [0] => Array
        (
            [period] => 201303
            [out_count] => 383
        )

    [1] => Array
        (
            [period] => 201304
            [out_count] => 43
        )

    [2] => Array
        (
            [period] => 201305
            [out_count] => 0
        )

    [3] => Array
        (
            [period] => 201306
            [out_count] => 0
        )

    [4] => Array
        (
            [period] => 201307
            [out_count] => 251
        )

    [5] => Array
        (
            [period] => 201308
            [out_count] => 0
        )

    [6] => Array
        (
            [period] => 201309
            [out_count] => 807
        )

)

热点排行