0

我从数据库中选择了一个日期范围。对于此特定示例,日期介于 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 个实例放入我的阵列中?

4

5 回答 5

4

尝试使用array_unique

$times = array_unique($times);
于 2013-06-19T08:51:36.517 回答
2

下一行的目的是什么?

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

我认为你只需要注释这条线就可以得到你想要的。

// for ($j = 9; $j <= 17; $j++)
于 2013-06-19T08:59:00.353 回答
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
)
于 2013-06-19T08:53:09.540 回答
1

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

您可以在没有用户拉取的情况下使用下面的代码来生成您的日期范围,然后您的用户拉取单独传递这个数组以进行比较/检查。

$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),则更不用说

于 2013-06-19T08:53:41.490 回答
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);
                              }

                    }
                }
            }

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

于 2013-06-19T08:54:14.930 回答