Выберите SubArray, если сегодняшняя дата находится между значением 2 ключей

У меня есть многомерный массив, как это:

$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));
}

Я пытался следовать предложениям из этого вопроса Как искать по ключу =>значение в многомерном массиве в PHP

но если я могу фильтровать по ключу = значению, я не могу сделать то же самое с помощью функции «check_if_in_range».

3

Решение

Вы знаете, что 30/06/2015 неверная дата, и strtotime() вернусь false? Увидеть Вот. Формат mm/dd/yyyy американский месяц, день и год. Так что твой формат нестандартный.

Лучший способ — преобразовать его в стандартный формат, а затем использовать strtotime()пример или просто использовать DateTime::createFromFormat()пример.

После того, как вы узнаете, как работает форматирование и преобразование дат, вы можете просто выполнить простой цикл foreach и разбить первый найденный результат. Вот немного демонстрация.

1

Другие решения

Попробуйте что-то вроде следующего

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

По вопросам рекламы [email protected]