我有一个从数据库中选择的日期范围。对于这个特殊的例子,日期是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?
答案 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);
}
}
}
}
通过这个你检查那个数组中已经存在的数据,如果它不存在,它将被添加到数组中