首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >神秘的2012年2月10日未设置为数组

神秘的2012年2月10日未设置为数组
EN

Stack Overflow用户
提问于 2012-02-15 00:30:58
回答 3查看 67关注 0票数 1

首先是数据:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `calendar_events` (
`event_id` int(5) unsigned NOT NULL AUTO_INCREMENT,
`event_day` date DEFAULT NULL,
`event_day_to` date DEFAULT NULL,
`event_year` int(4) NOT NULL DEFAULT '0',
`event_time` varchar(7) NOT NULL DEFAULT '',
`event_time_to` varchar(7) DEFAULT NULL,
`event_title` varchar(200) NOT NULL DEFAULT '',
`event_desc` text NOT NULL,
`event_type` varchar(2) DEFAULT NULL,
PRIMARY KEY (`event_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

--
-- Dumping data for table `calendar_events`
--

INSERT INTO `calendar_events` (`event_id`, `event_day`, `event_day_to`,    `event_year`, `event_time`, `event_time_to`, `event_title`, `event_desc`, `event_type`) 
VALUES
(8, '2012-02-10', '2012-02-10', 0, '', NULL, 'Feb 10', '', NULL),
(5, '2012-02-21', '2012-02-23', 0, '', NULL, '21-23 range addition', '', NULL),
(4, '2012-02-15', '2012-02-18', 0, '', NULL, 'Febbb 18', 'Some stuff here as a description', NULL),
(7, '2012-02-12', '2012-02-12', 0, '', NULL, 'single date 12', '', NULL),
(9, '2012-02-28', '2012-02-28', 0, '', NULL, 'test 28Date', '', NULL),
(10, '2012-02-01', '2012-02-01', 0, '', NULL, 'feb1', '', NULL);

使值可用的查询:

代码语言:javascript
复制
mysql_select_db($database_MySQLconn, $MySQLconn);
$query_rsDates = "SELECT calendar_events.event_day, calendar_events.event_id, calendar_events.event_title, calendar_events.event_desc, calendar_events.event_day_to FROM calendar_events";
$rsDates = mysql_query($query_rsDates, $MySQLconn) or die(mysql_error());
$row_rsDates = mysql_fetch_assoc($rsDates);
$totalRows_rsDates = mysql_num_rows($rsDates);

接下来是将值设置为数组的代码:

代码语言:javascript
复制
$dates = array();


while ($row_rsDates = mysql_fetch_assoc($rsDates))
{

for($start_date = strtotime($row_rsDates['event_day']);
$start_date <= strtotime($row_rsDates['event_day_to']);
$start_date = $start_date + 24*3600)

{
$row_rsDates['event_day'] = date("Y-n-j", $start_date);
$dates[] = $row_rsDates;
}
}

echo json_encode($dates);

生成的JSON:

代码语言:javascript
复制
[{"event_day":"2012-2-21","event_id":"5","event_title":"21-23 range addition","event_desc":"","event_day_to":"2012-02-23"},{"event_day":"2012-2-22","event_id":"5","event_title":"21-23 range addition","event_desc":"","event_day_to":"2012-02-23"},{"event_day":"2012-2-23","event_id":"5","event_title":"21-23 range addition","event_desc":"","event_day_to":"2012-02-23"},{"event_day":"2012-2-15","event_id":"4","event_title":"Febbb 18","event_desc":"Some stuff here as a description","event_day_to":"2012-02-18"},{"event_day":"2012-2-16","event_id":"4","event_title":"Febbb 18","event_desc":"Some stuff here as a description","event_day_to":"2012-02-18"},{"event_day":"2012-2-17","event_id":"4","event_title":"Febbb 18","event_desc":"Some stuff here as a description","event_day_to":"2012-02-18"},{"event_day":"2012-2-18","event_id":"4","event_title":"Febbb 18","event_desc":"Some stuff here as a description","event_day_to":"2012-02-18"},{"event_day":"2012-2-12","event_id":"7","event_title":"single date 12","event_desc":"","event_day_to":"2012-02-12"},{"event_day":"2012-2-28","event_id":"9","event_title":"test 28Date","event_desc":"","event_day_to":"2012-02-28"},{"event_day":"2012-2-1","event_id":"10","event_title":"feb1","event_desc":"","event_day_to":"2012-02-01"}]

Feb的10号没有显示…我可以添加一个新的单一日期(相同的开始日期和结束日期),它们可以完美地工作。我可以删除Feb的10号并将其作为新记录重新插入,但它仍然无法显示…

现在让我们对当前数组执行print_r操作:

代码语言:javascript
复制
Array
(
[0] => Array
(
[event_day] => 2012-2-21
[event_id] => 5
[event_title] => 21-23 range addition
[event_desc] =>
[event_day_to] => 2012-02-23
)

[1] => Array
(
[event_day] => 2012-2-22
[event_id] => 5
[event_title] => 21-23 range addition
[event_desc] =>
[event_day_to] => 2012-02-23
)

[2] => Array
(
[event_day] => 2012-2-23
[event_id] => 5
[event_title] => 21-23 range addition
[event_desc] =>
[event_day_to] => 2012-02-23
)

[3] => Array
(
[event_day] => 2012-2-15
[event_id] => 4
[event_title] => Febbb 18
[event_desc] => Some stuff here as a description
[event_day_to] => 2012-02-18
)

[4] => Array
(
[event_day] => 2012-2-16
[event_id] => 4
[event_title] => Febbb 18
[event_desc] => Some stuff here as a description
[event_day_to] => 2012-02-18
)

[5] => Array
(
[event_day] => 2012-2-17
[event_id] => 4
[event_title] => Febbb 18
[event_desc] => Some stuff here as a description
[event_day_to] => 2012-02-18
)

[6] => Array
(
[event_day] => 2012-2-18
[event_id] => 4
[event_title] => Feb 18 single date
[event_desc] => Some stuff here as a description
[event_day_to] => 2012-02-18
)

[7] => Array
(
[event_day] => 2012-2-12
[event_id] => 7
[event_title] => single date 12
[event_desc] =>
[event_day_to] => 2012-02-12
)

[8] => Array
(
[event_day] => 2012-2-28
[event_id] => 9
[event_title] => test 28Date
[event_desc] =>
[event_day_to] => 2012-02-28
)

[9] => Array
(
[event_day] => 2012-2-1
[event_id] => 10
[event_title] => feb1
[event_desc] =>
[event_day_to] => 2012-02-01
)

)

神秘的Feb 10号无处可寻…

为什么这个日期不能像其他日期那样工作呢?还有其他单一日期事件,如2月1日到2月1日,所以这不是问题。而且,如果2月10日作为第二条记录(当然是新的event_id )再次添加到数组中,则这条新记录会被添加到数组中而不会出现问题。

为什么包含Feb 10的第一条记录不会被处理到数组中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-15 00:47:25

通过调用

代码语言:javascript
复制
$row_rsDates = mysql_fetch_assoc($rsDates);

在while循环之前,删除第一行。只需放下这一行,事情就会好起来。

票数 1
EN

Stack Overflow用户

发布于 2012-02-15 00:49:24

原因很简单,

根据你的代码,

您已经调用了mysql_fetch_assoc两次,并且结果游标(在第一次调用之后)前进到第二行,因此第二次调用是从第二行开始,因此$date不包含第一条记录中的值

  1. $row_rsDates = mysql_fetch_assoc($rsDates);
  2. while ($row_rsDates = mysql_fetch_assoc($rsDates))
票数 0
EN

Stack Overflow用户

发布于 2012-02-15 00:54:49

在while循环之前调用一次mysql_fetch_assoc。所以你在这里找到的记录集不会包含第一个结果。日期为2012-02-10的那个。因此,您应该删除/注释这些行:

$row_rsDates = mysql_fetch_assoc($rsDates);

$totalRows_rsDates = mysql_num_rows($rsDates);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9280537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档