Я пытаюсь получить 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.
Да, именно это я имел в виду. Прошу прощения, так как я ввел неправильные коды. Большое спасибо!
Возможный дубликат Как я могу отсортировать массивы и данные в PHP?






<?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
Вы имеете в виду, что у вас более 2 элементов в
$data, и вы хотите получить 2 первыми после сортировки?