Выберите 2 самые новые даты из массива и расположите по порядку

Я пытаюсь получить 2 самые новые даты в массиве дат и расположить их по порядку. Но я мог просто расположить их по порядку:

<?php
$data = array(
    array(
        "title" => "Another title",
        "date"  => "Fri, 17 Jun 2011 08:55:57 +0200"
    ),
    array(
        "title" => "Another title",
        "date"  => "Fri, 17 Jun 2014 08:55:57 +0200"
    ),
    array(
        "title" => "My title",
        "date"  => "Mon, 18 Jun 2012 09:55:57 +0200"
    )
);

function sortFunction( $a, $b ) {
    return strtotime($a["date"]) - strtotime($b["date"]);
}
usort($data, "sortFunction");
var_dump($data);
?>

Пожалуйста, дайте мне предложение получить 2 новейшие даты в $ data.

Вы имеете в виду, что у вас более 2 элементов в $data, и вы хотите получить 2 первыми после сортировки?

Syscall 22.03.2018 16:27

Да, именно это я имел в виду. Прошу прощения, так как я ввел неправильные коды. Большое спасибо!

Lá Dối Trá 22.03.2018 16:30

Возможный дубликат Как я могу отсортировать массивы и данные в PHP?

NIKHIL NEDIYODATH 22.03.2018 16:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
42
2

Ответы 2

<?php
$data = array(
    array(
        "title" => "Title 1",
        "date"  => "Fri, 17 Jun 2011 08:55:57 +0200"
    ),
    array(
        "title" => "Title 2",
        "date"  => "Sat, 18 Jun 2011 09:55:57 +0200"
    ),
      array(
        "title" => "Title 3",
        "date"  => "Sun, 19 Jun 2011 08:55:57 +0200"
    ),
      array(
        "title" => "Title 4",
        "date"  => "Mon, 20 Jun 2011 08:55:57 +0200"
    )
);

//Sort them DESC by date. (switch $a for $b AND $b for $a)
function sortFunction( $a, $b ) {
    return strtotime($b["date"]) - strtotime($a["date"]);
}
usort($data, "sortFunction");


//Number of dates you want to display
$datesToDisplay = 2;
//An array to push in our desired number of dates
$dates = [];

for($i = 0; $i < $datesToDisplay; $i++){
    array_push($dates, $data[$i]);
}


print_r($dates);
?>

Если вы хотите получить две самые свежие даты, вам следует отсортировать данные в обратном порядке (переключите $b и $a в вашем sortFunction()). Затем вы можете использовать array_slice() для извлечения двух первых элементов:

function sortFunction($a, $b) {
    // switch $b and $a:
    return strtotime($b["date"]) - strtotime($a["date"]);
}
// sort data from newest to oldest
usort($data, "sortFunction");

// extract two first elements:
$two_first = array_splice($data, 0, 2) ;

print_r($two_first);

Выходы:

Array (
    [0] => Array (
            [title] => Another title
            [date] => Fri, 17 Jun 2014 08:55:57 +0200
        )
    [1] => Array (
            [title] => My title
            [date] => Mon, 18 Jun 2012 09:55:57 +0200
        )
)

Если вы хотите сохранить исходный заказ, вы можете использовать:

$two_last = array_splice($data, -2) ; // get two last elements

Другие вопросы по теме