试试这个代码,并希望这是很清楚,这个解决方案背后的想法很简单:
- 首先我们用
post_date
列值对用户定义的比较函数进行排序,这将有助于我们在以后的循环在日期。
- 之后,我们通过从
1
开始for
循环并确保数组的大小大于1
,确保数组至少包含两个要比较的值。如果不是,我们会按照原样返回数组。
$ i = 1; $ i < count($ array); => count($ array)> 1 =>至少有2个 的值。
- 接下来我们计算阵列的两个连续
post_date
之间的差异,如果差异1 day
所以我们有连续两天,否则我们要在第二天从添加到阵列“$ I”通过使用该助手功能的post_date
位置:
array_splice($阵列,$ I,0,[[ 'POST_DATE'=> $ date1->修改('+ 1一天) - >格式('Ym-d'), 'num'=> 0, ]]);
这将增加1天post_date
和推其它值到所述阵列的,这使得该阵列的尺寸更大的(1值)和将添加另一迭代的for循环的权利。
在循环结束时,我们将获得OP所需的完整连续日。
<?php
$array = [
['post_date' => '2017-07-22','num' => '1'],
['post_date' => '2017-07-26','num' => '5'],
['post_date' => '2017-07-24','num' => '2'],
];
sort($array);
$count = count($array);
for($i = 1; $i < $count; $i++) {
$date1 = new DateTime($array[$i-1]['post_date']);
$date2 = new DateTime($array[$i]['post_date']);
$diff = $date2->diff($date1)->format("%a");
if(1 < $diff) {
array_splice($array, $i, 0, [[
'post_date' => $date1->modify('+1 day')->format('Y-m-d'),
'num' => 0,
]]);
$count++;
}
}
echo "<pre>";
print_r($array);
输出:
Array
(
[0] => Array
(
[post_date] => 2017-07-22
[num] => 1
)
[1] => Array
(
[post_date] => 2017-07-23
[num] => 0
)
[2] => Array
(
[post_date] => 2017-07-24
[num] => 2
)
[3] => Array
(
[post_date] => 2017-07-25
[num] => 0
)
[4] => Array
(
[post_date] => 2017-07-26
[num] => 5
)
)
你试过了什么? –
我相信我对你的问题有一个更加完善的解决方案,但是当你的问题处于搁置状态时,我无法发布。请改善您的问题与所需的细节,以便它可以重新打开。 (如果它重新开放,请ping我) – mickmackusa