PHP根据给定的日期范围修改数组
我有一个用php编写的表单,包含以下数组和两个变量: 开始日期和结束日期 我想做的是,只显示用户定义的日期范围内的日期PHP根据给定的日期范围修改数组,php,arrays,date,filter,Php,Arrays,Date,Filter,我有一个用php编写的表单,包含以下数组和两个变量: 开始日期和结束日期 我想做的是,只显示用户定义的日期范围内的日期 $startDate = "2013-03-08"; $endDate = "2013-03-12"; Array ( [0] => 2013-03-06|Lorem|Mom|01:45 [1] => 2013-03-07|ipsum|Dad|01:00 [2] => 2013-03-08|dolor|Dad|01:45 [3
$startDate = "2013-03-08";
$endDate = "2013-03-12";
Array
(
[0] => 2013-03-06|Lorem|Mom|01:45
[1] => 2013-03-07|ipsum|Dad|01:00
[2] => 2013-03-08|dolor|Dad|01:45
[3] => 2013-03-09|sit|Dad|01:00
[4] => 2013-03-10|amet|Mom|01:45
[5] => 2013-03-11|Lorem|Mom|01:45
[6] => 2013-03-12|ipsum|Mom|01:00
[7] => 2013-03-13|dolor|Dad|01:45
[8] => 2013-03-14|sit|Mom|01:00
[9] => 2013-03-15|amet|Mom|01:45
)
发布表单后,数组将如下所示:
Array
(
[0] => 2013-03-08|dolor|Dad|01:45
[1] => 2013-03-09|sit|Dad|01:00
[2] => 2013-03-10|amet|Mom|01:45
[3] => 2013-03-11|Lorem|Mom|01:45
[4] => 2013-03-12|ipsum|Mom|01:00
)
$startDate = strtotime('2013-03-08');
$endDate = strtotime('2013-03-12');
$array = array(...); // your input array
$filteredArray = array_filter ($array, 'filterArray');
function filterArray ($value) {
global $startDate;
global $endDate;
$valArray = explode('|', $value);
$date = strtotime($valArray[0]);
return ($date >= $startDate && $date <= $endDate);
}
最简单的方法是什么
有什么想法吗
/janne我建议使用
array\u filter()
函数
$startDate = strtotime('2013-03-08');
$endDate = strtotime('2013-03-12');
$array = array(...); // your input array
$filteredArray = array_filter($array, function($value) use ($startDate, $endDate) {
$valArray = explode('|', $value);
$date = strtotime($valArray[0]);
return ($date >= $startDate && $date <= $endDate);
});
$startDate=strottime('2013-03-08');
$endDate=strottime('2013-03-12');
$array=数组(…);//您的输入数组
$filteredArray=array\u filter($array,function($value)use($startDate,$endDate){
$valArray=explode(“|”,$value);
$date=strottime($valArray[0]);
return($date>=$startDate&&$date=5.3.0对于旧版本,您必须用命名函数替换匿名函数,并按如下方式调用它:
Array
(
[0] => 2013-03-08|dolor|Dad|01:45
[1] => 2013-03-09|sit|Dad|01:00
[2] => 2013-03-10|amet|Mom|01:45
[3] => 2013-03-11|Lorem|Mom|01:45
[4] => 2013-03-12|ipsum|Mom|01:00
)
$startDate = strtotime('2013-03-08');
$endDate = strtotime('2013-03-12');
$array = array(...); // your input array
$filteredArray = array_filter ($array, 'filterArray');
function filterArray ($value) {
global $startDate;
global $endDate;
$valArray = explode('|', $value);
$date = strtotime($valArray[0]);
return ($date >= $startDate && $date <= $endDate);
}
$startDate=strottime('2013-03-08');
$endDate=strottime('2013-03-12');
$array=array(…);//您的输入数组
$filteredArray=array_filter($array,'filterArray');
函数过滤器阵列($value){
全球$起始日期;
全球$结束日期;
$valArray=explode(“|”,$value);
$date=strottime($valArray[0]);
return($date>=$startDate&&$date您可以这样做:
让$dates作为您的输入数组
$dates = array(
'0' => '2013-03-06|Lorem|Mom|01:45',
'1' => '2013-03-07|ipsum|Dad|01:00',
'2' => '2013-03-08|dolor|Dad|01:45',
'3' => '2013-03-09|sit|Dad|01:00',
'4' => '2013-03-10|amet|Mom|01:45',
'5' => '2013-03-11|Lorem|Mom|01:45',
'6' => '2013-03-12|ipsum|Mom|01:00',
'7' => '2013-03-13|dolor|Dad|01:45',
'8' => '2013-03-14|sit|Mom|01:00',
'9' => '2013-03-15|amet|Mom|01:45)'
);
$startDate = "2013-03-08";
$endDate = "2013-03-12";
$new_startDate = strtotime($startDate);
$new_endDate = strtotime($endDate);
$user_dates = array();
foreach ($dates as $date) {
$date_values = explode('|', $date);
$current_date_value = $date_values[0];
$current_date_value = strtotime($current_date_value);
if ($current_date_value >= $new_startDate && $current_date_value <= $new_endDate) {
$user_dates[] = $date;
}
}
$dates=数组(
“0”=>“2013-03-06 | Lorem | Mom | 01:45”,
“1”=>“2013-03-07 | ipsum | Dad | 01:00”,
“2”=>“2013-03-08 |多洛|爸爸| 01:45”,
“3”=>“2013-03-09坐爸爸01:00”,
“4”=>“2013-03-10 | amet | Mom | 01:45”,
“5”=>“2013-03-11 | Lorem | Mom | 01:45”,
“6”=>“2013-03-12 | ipsum | Mom | 01:00”,
“7”=>“2013-03-13 |多洛|爸爸| 01:45”,
‘8’=>‘2013-03-14 |坐|妈妈| 01:00’,
“9”=>“2013-03-15 | amet | Mom | 01:45”
);
$startDate=“2013-03-08”;
$endDate=“2013-03-12”;
$new_startDate=strottime($startDate);
$new_endDate=strottime($endDate);
$user_dates=array();
foreach($日期作为$日期){
$date_值=分解(“|”,$date);
$current_date_value=$date_value[0];
$current\u date\u value=strottime($current\u date\u value);
如果($current\u date\u value>=$new\u startDate&&$current\u date\u value,为什么在同一个键中有多个值?破坏了数组的全部功能。数组过滤器()你可以使用foreach,在foreach中做一个子字符串,将前10个字母的子字符串转换成timestamd,检查时间戳是否在用户输入之间,如果不在,则取消设置值,或者像@MarkBaker一样使用数组过滤器谢谢,先生。现在一切都有意义了。嗨,迈克,我问了一个类似的问题,看到了这段代码的工作原理,我的数组是一个json_解码的数组,它有一个名为date的键。它实际上是多个数组,我将如何更改$valArray=explode('|',$value)
to,从键获取所有日期date
谢谢。示例代码@Anagio首先,您可能会将$array['results']
传递给函数,因为这才是您真正感兴趣的。其次,您不再需要使用explode()
在函数中,因为您已经有了一个用于$value
的数组。您只需比较$value['date']
值。请参阅此代码示例说明,在您的情况下,我将strottime()
更改为DateTime::createDateFromFormat()
,因为您的日期格式不是strottime()
可以处理。这在代码板中实际上不起作用,因为它显然不支持DateTime。谢谢,我只需要将php更新到5.3,以便DateTime::createDateFromFormat()
工作。非常感谢!!!