2015-04-23 2 views
3

У меня есть многомерный массив так:Выберите подмассив если дата сегодня находится между 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)); 
} 

Я судимым последовать предложения от этого вопроса How to search by key=>value in a multidimensional array in PHP

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

+0

Как вы использовали 'check_if_in_range'? – SaidbakR

+0

, как указал Главич в ответе, я выбрал свою ошибку в формате даты. Я сравнивал «30/06/2015» на сегодняшний день («d/m/Y») в функции check_if_in_range, и он не работал. – bluantinoo

ответ

1

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

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

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

-1

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

foreach($array as $key => $value) { 
    if(check_in_range($value['start'], $value['end'], $today_date)) { 
     $selected_subarray = $value; 
    } 
} 
Смежные вопросы