2013-09-11 3 views
1

У меня есть Multilevel Array (См. Рисунок структуры массива ниже), и мне нужно получить суб-вложенный массив с более высоким date value.Найти последнюю дату из вложенного массива

Мне было интересно, есть ли прямой способ сортировать вложенные массивы на date value или получить максимальный date value?

Массив Карта

+3

Я бы, наверное, начал с поиска [usort] (http://us2.php.net/manual/en/function.usort.php). – crush

ответ

2

Чтобы сделать это, usort() функция будет полезна:

usort($rgData, function($rgX, $rgY) 
{ 
    $x = strtotime($rgX['date']); 
    $y = strtotime($rgY['date']); 
    return $x<$y?-1:$x!=$y; 
}); 
//var_dump($rgData); 

, если вы хотите получить высокое значение, то это будет ['date'] ключ последнего элемента после выполнения вид выше.

Edit: если вы уверены, что формат будет точно такой же, как на картинке всегда, вы можете использовать прямое сравнение строк с помощью strcmp (это было бы, вероятно, быстрее)

+0

Преобразует их из строки в целое число, которое действительно необходимо? Строковой cmp-функции было бы достаточно для их упорядочения, не так ли? – crush

+0

@crush, потому что, если вы сравните даты как строки, вы получите неправильный результат в случае, когда '$ x <$ y' как дата, но' $ x> $ y' как строка. –

+0

Это неверно, когда даты используют ведущие 0 в предоставленном формате. – crush

1

Как об использовании usort():

$input = array(
    array('date' => '2013-09-11 13:08:40 +0000'), 
    array('date' => '2013-09-11 13:09:17 +0000')); 

usort($input, function(array $a, array $b) { 
    $aTimestamp = strtotime($a['date']); 
    $bTimestamp = strtotime($b['date']); 

    if($aTimestamp == $bTimestamp) return 0; 
    return $aTimestamp < $bTimestamp; 
}); 

print_r($input); //$input[0] has the latest date value 
Смежные вопросы