我有一个数组,我想按日期排序。我无法按日期降序排序。请帮忙。
Array
(
[1] => Array
(
[1] => 11/05/2013
[2] => Executive Planning Day
)
[2] => Array
(
[1] => 13/06/2013
[2] => Middle Leaders Planning Day
)
[3] => Array
(
[1] => 12/07/2013
[2] => New Staff Induction Day
)
[4] => Array
(
[1] => 13/04/2013
[2] => Staff Conference Day No. 1
)
[5] => Array
(
[1] => 14/04/2013
[2] => Staff Conference Day No. 2
)
[6] => Array
(
[1] => 15/02/2013
[2] => Staff Conference Day No. 3
)
[7] => Array
(
[1] => 16/03/2013
[2] => Australia Day
)
)
答案 0 :(得分:20)
试试这个
function sortFunction( $a, $b ) {
return strtotime($a[1]) - strtotime($b[1]);
}
usort($data, "sortFunction"); //Here You can use asort($data,"sortFunction")
或者您可以尝试详细信息(仅仅是建议)
function sortFunction($a,$b)
if ($a[1] == $b[1]) return 0;
return strtotime($a[1]) - strtotime($b[1]);
}
usort($data,"sortFunction");
由于 strtotime不服从d / m / Y格式尝试这样
$orderByDate = $my2 = array();
foreach($data as $key=>$row)
{
$my2 = explode('/',$row[1]);
$my_date2 = $my2[1].'/'.$my2[0].'/'.$my2[2];
$orderByDate[$key] = strtotime($my_date2);
}
array_multisort($orderByDate, SORT_DESC, $data);
答案 1 :(得分:2)
使用usort()
功能:
function cmp($a, $b) {
if ($a[1] == $b[1]) return 0;
return (strtotime($a[1]) < strtotime($b[1])) ? 1 : -1;
}
usort($data, "cmp");
答案 2 :(得分:2)
对这里的所有答案并不完全满意所以我想我会提到如果你希望对保存密钥的关联数组进行排序,那么你应该使用uasort
而不是{ {3}}。您还可以使用usort
库从您喜欢的任何格式解析日期,对于某些标准格式,该库还包含一些DateTime
。
uasort($array, function($a, $b){
$format = 'd/m/Y';
$ascending = false;
$zone = new DateTimeZone('UTC');
$d1 = DateTime::createFromFormat($format, $a[1], $zone)->getTimestamp();
$d2 = DateTime::createFromFormat($format, $b[1], $zone)->getTimestamp();
return $ascending ? ($d1 - $d2) : ($d2 - $d1);
});
答案 3 :(得分:2)
我花了一个晚上研究如何为我自己的类似问题做这件事。按日期对该数组中的键进行排序的关联数组。
usort和uasort都需要一个必须编写的sort函数,并作为第二个参数传递。 usort和uasort使用sort函数来比较数组中的每个项目并将结果存储为$ yourArray
function sortFunction( $a, $b ) {
return strtotime($a[1]) - strtotime($b[1]);
}
uasort($yourArray, "sortFunction");
答案 4 :(得分:1)
我会为订购构建一个数组。
$ordered = array();
foreach ($planning as $event) {
$ordered[$event['date']] = $event;
}
ksort($ordered);
答案 5 :(得分:1)
使用usort(使用用户定义的比较函数按值对数组进行排序)。
usort($array, function($a1, $a2) {
$value1 = strtotime($a1['date']);
$value2 = strtotime($a2['date']);
return $value1 - $value2;
});
答案 6 :(得分:1)
我跳到这里进行关联数组排序,并在http://php.net/manual/en/function.sort.php上找到了这个惊人的功能。此函数非常动态,使用指定键按升序和降序排序。
通过特定键对数组进行排序的简单函数。保持索引关联。
<?php
function array_sort($array, $on, $order=SORT_ASC)
{
$new_array = array();
$sortable_array = array();
if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v)) {
foreach ($v as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v;
}
}
switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}
return $new_array;
}
$people = array(
12345 => array(
'id' => 12345,
'first_name' => 'Joe',
'surname' => 'Bloggs',
'age' => 23,
'sex' => 'm'
),
12346 => array(
'id' => 12346,
'first_name' => 'Adam',
'surname' => 'Smith',
'age' => 18,
'sex' => 'm'
),
12347 => array(
'id' => 12347,
'first_name' => 'Amy',
'surname' => 'Jones',
'age' => 21,
'sex' => 'f'
)
);
print_r(array_sort($people, 'age', SORT_DESC)); // Sort by oldest first
print_r(array_sort($people, 'surname', SORT_ASC)); // Sort by surname
答案 7 :(得分:1)
所以这样做:
//your array
$arr = array();
array_push($arr, array("11/05/2013", "Executive Planning Day"));
array_push($arr, array("13/06/2013", "Middle Leaders Planning Day"));
array_push($arr, array("12/07/2013", "New Staff Induction Day"));
array_push($arr, array("13/04/2013", "Staff Conference Day No. 1"));
array_push($arr, array("14/04/2013", "Staff Conference Day No. 2"));
array_push($arr, array("15/02/2013", "Staff Conference Day No. 3"));
array_push($arr, array("16/03/2013", "Australia Day"));
var_dump($arr);
function sortDateDesc($a, $b){
$strA = implode("-", array_reverse( explode("/", $a[0]) ) );
$strB = implode("-", array_reverse( explode("/", $b[0]) ) );
return strtotime($strB) - strtotime($strA);
}
usort($arr, "sortDateDesc");
var_dump($arr);
如果您的日期格式是固定的日/月/年,那么您需要以解析器可以识别的字符串格式传递它,如果我记得很好的话,year-month-day是ISO标准,那很好用>
答案 8 :(得分:0)
@ Gautam3164的解决方案几乎是完美的。您需要更改日期的格式。 我会说:
function sortFunction( $a, $b ) {
return strtotime(str_replace('/', '-',$a[1])) - strtotime(str_replace('/', '-',$b[1]));
}
usort($data, "sortFunction"); //Here You can use asort($data,"sortFunction")
1987年11月10日 - &gt; 1987年11月10日 11-10-1987 - &gt; 1987年10月11日
答案 9 :(得分:0)
$sortdate = array(
'17/08/2015',
'02/01/2017',
'05/02/2014'
);
function sortFunction($a, $b)
{
$datea = strtotime(str_replace('/', '-', $a));
$dateb = strtotime(str_replace('/', '-', $b));
if ($datea == $dateb)
{
return 0;
}
return ($datea < $dateb) ? -1 : 1;
}
usort($sortdate, "sortFunction");
echo "<pre>";
var_dump($sortdate);