如果今天的日期介于2个键值之间,请选择SubArray

时间:2015-04-23 19:37:29

标签: php arrays date array-filter

我有一个像这样的多维数组:

$array = array(
    0 => array(
        'name' => 'first element',
        'start' => '30/04/2015',
        'end' => '30/06/2015'
    ),
    1 => array(
        'name' => 'second element',
        'start' => '01/07/2015',
        'end' => '30/09/2015'
    ),
    2 => array(
        'name' => 'fourth element',
        'start' => '01/10/2015',
        'end' => '15/12/2015'
        )
);

我需要根据今天的日期选择一个数组子阵列(项目)。 今天的日期必须在开始日期和结束日期之间。

最后,我想有这个:

$selected_subarray = array (
        'name' => 'first element',
        'start' => '30/04/2015',
        'end' => '30/06/2015'
    )

我用来检查这两个日期:

function check_if_in_range($start_date, $end_date, $today_date)
{
  $start_d = strtotime($start_date);
  $end_d = strtotime($end_date);
  $today_d = strtotime($today_date);
  return (($today_d >= $start_d) && ($today_d <= $end_d));
}

我尝试按照此问题的建议How to search by key=>value in a multidimensional array in PHP

但如果我能够过滤key =值,我就无法使用“check_if_in_range”函数执行相同操作。

2 个答案:

答案 0 :(得分:1)

您知道30/06/2015是无效日期,strtotime()会返回false吗?见here。格式mm/dd/yyyy是美国的月,日和年。所以你的格式是非标准的。

最好的方法是将其转换为标准格式,然后使用strtotime() example 或只使用DateTime::createFromFormat() example < / SUP>

在了解了格式化和转换日期的工作原理之后,您可以执行简单的foreach循环,并在第一次找到结果时中断。这是一个小demo

答案 1 :(得分:-1)

尝试类似以下内容

foreach($array as $key => $value) {
    if(check_in_range($value['start'], $value['end'], $today_date)) {
        $selected_subarray = $value;
    }
}