Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP根据给定的日期范围修改数组_Php_Arrays_Date_Filter - Fatal编程技术网

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

我有一个用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] => 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()
工作。非常感谢!!!