是否有这样做的功能?
例如,如果我有这样的数组:
array(
2014-08-05 10:23:34,
2014-08-08 13:12:56,
2014-08-07 08:02:21,
2014-08-06 11:22:33,
2014-08-03 6:02:44,
2014-08-08 10:23:34
);
我想返回2014-08-03和2014-08-06之间的所有日期。
这些阵列中存在大量数据,甚至可能存在数万个数据。我实际上是从数据库中获取所有内容,我想按日期划分数据(例如2小时,1天,3天等等,根据访问者选择的时间范围)。
如果没有大量查询或广泛的PHP函数,它怎么可能呢?
根据要求,我正在显示图表插件的数据结构(值只是简单的例子):
{x: '2014-08-05 10:23:34', y: 3, data1: 3, data2: 320, data3: 76},
{x: '2014-08-05 10:23:34', y: 2, data1: 1, data2: 300, data3: 27},
{x: '2014-08-05 10:23:34', y: 2, data1: 4, data2: 653, data3: 33},
{x: '2014-08-05 10:23:34', y: 3, data1: 3, data2: 120, data3: 54}
答案 0 :(得分:1)
你能在MySQL中进行排序吗?如果是这样,您可以使用BETWEEN运算符:
' SELECT * FROM my_table where date_column BETWEEN' 2014-08-03'和' 2014-08-06'
编辑:与使用> =和< =相同,所以要小心第二个日期。此查询不会返回2014-08-06 00:00:01,因为它大于2014-08-06。
答案 1 :(得分:0)
您可以尝试使用数组漫步
function checkDate(&$item1, $key, $dateToCompare)
{
//Your Function to compare and echo or anything else
}
array_walk($fruits, 'checkDate', $dateToCompare);
答案 2 :(得分:0)
正如Pagerange所提到的,最好使用SQL查询,但如果你必须在PHP中这样做,这里有一个解决方案:
// start date chosen by user
$start_year = 2014;
$start_month = 8;
$start_day = 3;
// end date chosen by user
$end_year = 2014;
$end_month = 8;
$end_day = 6;
$dates = array(
'2014-08-05 10:23:34',
'2014-08-08 13:12:56',
'2014-08-07 08:02:21',
'2014-08-06 11:22:33',
'2014-08-03 6:02:44',
'2014-08-08 10:23:34'
);
$data_in_range = array();
// using FOR instead of FOREACH for performance
// (assuming zero-based index for $dates array)
for($i = 0; $i < count($dates); $i++) {
$year = substr($dates[$i], 0, 4);
// using intval for values with a leading 0
$month = intval(substr($dates[$i], 5, 2));
$day = intval(substr($dates[$i], 8, 2));
if ($year >= $start_year && $year <= $end_year) {
if ($month >= $start_month && $month <= $end_month) {
// depending on your definition of 'between' (MySQL
// includes the boundaries), you may want
// this conditional to read > && <
if ($day >= $start_day && $day <= $end_day) {
$data_in_range[] = $dates[$i];
}
}
}
}
print_r($data_in_range);
我不推荐这个答案,而是提供PHP解决方案。