PHP日期范围,数组

时间:2013-06-19 08:50:30

标签: php date

我有一个从数据库中选择的日期范围。对于这个特殊的例子,日期是6月20日至6月29日。

我已设法创建这些日期的数组,但日期会重复多次。

我的数组看起来像这样:

Array
(
 [0] => 2013-06-20
 [1] => 2013-06-20
 [2] => 2013-06-20
 [3] => 2013-06-20
 [4] => 2013-06-20
 [5] => 2013-06-20
 [6] => 2013-06-20
 [7] => 2013-06-20
 [8] => 2013-06-20
 [9] => 2013-06-21
 [10] => 2013-06-21
 [11] => 2013-06-21
 [12] => 2013-06-21
 [13] => 2013-06-21
 [14] => 2013-06-21
 [15] => 2013-06-21
 [16] => 2013-06-21
 [17] => 2013-06-21
 [18] => 2013-06-22
 [19] => 2013-06-22
 [20] => 2013-06-22
 [21] => 2013-06-22
 [22] => 2013-06-22
 [23] => 2013-06-22
 [24] => 2013-06-22
 [25] => 2013-06-22
 [26] => 2013-06-22
 [27] => 2013-06-23
 [28] => 2013-06-23
 [29] => 2013-06-23
 [30] => 2013-06-23
 [31] => 2013-06-23
 [32] => 2013-06-23
 [33] => 2013-06-23
 [34] => 2013-06-23
 [35] => 2013-06-23
 [36] => 2013-06-24
 [37] => 2013-06-24
 [38] => 2013-06-24
 [39] => 2013-06-24
 [40] => 2013-06-24
 [41] => 2013-06-24
 [42] => 2013-06-24
 [43] => 2013-06-24
 [44] => 2013-06-24
 [45] => 2013-06-25
 [46] => 2013-06-25
 [47] => 2013-06-25
 [48] => 2013-06-25
 [49] => 2013-06-25
 [50] => 2013-06-25
 [51] => 2013-06-25
 [52] => 2013-06-25
 [53] => 2013-06-25
 [54] => 2013-06-26
 [55] => 2013-06-26
 [56] => 2013-06-26
 [57] => 2013-06-26
 [58] => 2013-06-26
 [59] => 2013-06-26
 [60] => 2013-06-26
 [61] => 2013-06-26
 [62] => 2013-06-26
 [63] => 2013-06-27
 [64] => 2013-06-27
 [65] => 2013-06-27
 [66] => 2013-06-27
 [67] => 2013-06-27
 [68] => 2013-06-27
 [69] => 2013-06-27
 [70] => 2013-06-27
 [71] => 2013-06-27
 [72] => 2013-06-28
 [73] => 2013-06-28
 [74] => 2013-06-28
 [75] => 2013-06-28
 [76] => 2013-06-28
 [77] => 2013-06-28
 [78] => 2013-06-28
 [79] => 2013-06-28
 [80] => 2013-06-28
 [81] => 2013-06-29
 [82] => 2013-06-29
 [83] => 2013-06-29
 [84] => 2013-06-29
 [85] => 2013-06-29
 [86] => 2013-06-29
 [87] => 2013-06-29
 [88] => 2013-06-29
 [89] => 2013-06-29
)

从数组中可以看出,有89个实例。然而这只有9天了?

我觉得它与我的for循环有关。

我的PHP代码如下:

$user_availabilty = $this->vendor_model->get_user_availability($this->get_user_id());

        if($user_availabilty)
        {
            foreach($user_availabilty as $user_avail)
            {
                $start = strtotime($user_avail->user_availablity_startdate);
                $end = strtotime($user_avail->user_availablity_enddate);

                $times = array();

                for ($i = $start; $i <= $end; $i += 24 * 3600)
                {
                    for ($j = 9; $j <= 17; $j++)
                    {
                        $times []= date("Y-m-d", $i);
                    }
                }
            }

如何只将9个实例放入我的数组,而不是89?

5 个答案:

答案 0 :(得分:4)

尝试使用array_unique

$times = array_unique($times);

答案 1 :(得分:2)

以下行的目的是什么?

for ($j = 9; $j <= 17; $j++)

我认为你需要注意这一行才能得到你想要的东西。

// for ($j = 9; $j <= 17; $j++)

答案 2 :(得分:1)

使用array_unique功能。

直接来自PHP手册。

<?php
  $input = array("a" => "green", "red", "b" => "green", "blue", "red");
  $result = array_unique($input);
  print_r($result);
?>

输出

Array
(
    [a] => green
    [0] => red
    [1] => blue
)

答案 3 :(得分:1)

这是因为你的数组为每个用户生成了“日期”日期的多个实例(你有9个用户!)你真的不需要拉你的用户列表来生成日期范围

您可以使用下面的代码而无需用户拉动来生成您的日期范围,然后单独执行您的userpull传递此数组以进行比较/检查。

$start = strtotime($user_avail->user_availablity_startdate);
        $end = strtotime($user_avail->user_availablity_enddate);

        $times = array();

        for ($i = $start; $i <= $end; $i += 24 * 3600)
        {
            for ($j = 9; $j <= 17; $j++)
            {
                $times []= date("Y-m-d", $i);
            }
        }

正如在其他答案中所建议的那样,您可以使用array_unique()来修复它,但是我会查看您的整个逻辑流,在循环中不需要循环来生成开始和结束日期。如果你从mysql数据库中的可用用户中提取最小/最大范围(查找MIN()MAX()和DISTINCT),那就更少了。

答案 4 :(得分:1)

使用此

$user_availabilty = $this->vendor_model->get_user_availability($this->get_user_id());

        if($user_availabilty)
        {
            foreach($user_availabilty as $user_avail)
            {
                $start = strtotime($user_avail->user_availablity_startdate);
                $end = strtotime($user_avail->user_availablity_enddate);

                $times = array();

                for ($i = $start; $i <= $end; $i += 24 * 3600)
                {
                    for ($j = 9; $j <= 17; $j++)
                    {
                          if (!in_array(date("Y-m-d", $i),$times)){

                            $times []= date("Y-m-d", $i);
                              }

                    }
                }
            }

通过这个你检查那个数组中已经存在的数据,如果它不存在,它将被添加到数组中