读书人

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

发布时间: 2014-01-03 14:10:51 作者: rapoo

用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
)

)

读书人网 >PHP

热点推荐