我有一个像这样的多维数组:
$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”函数执行相同操作。
答案 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;
}
}