Сортировка массива по дате в порядке убывания по дате в php

У меня есть массив, и я хочу сортировать его по дате. Я не могу правильно сортировать его по дате в порядке убывания. Пожалуйста помоги.

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 ) ) 

Solutions Collecting From Web of "Сортировка массива по дате в порядке убывания по дате в php"

Попробуйте это

 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); 

Используйте usort() :

 function cmp($a, $b) { if ($a[1] == $b[1]) return 0; return (strtotime($a[1]) < strtotime($b[1])) ? 1 : -1; } usort($data, "cmp"); 

Не совсем доволен всеми ответами здесь, поэтому я подумал, что хочу упомянуть, что если вы хотите отсортировать ассоциативный массив, сохраняющий ключи, тогда вы должны использовать uasort а не 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); }); 

демонстрация

Я бы построил массив для заказа.

 $ordered = array(); foreach ($planning as $event) { $ordered[$event['date']] = $event; } ksort($ordered); 

Использование usort (Сортировка массива по значениям с использованием пользовательской функции сравнения).

 usort($array, function($a1, $a2) { $value1 = strtotime($a1['date']); $value2 = strtotime($a2['date']); return $value1 - $value2; }); 

Я провел ночь, работая над тем, как это сделать для моей собственной аналогичной проблемы. Сортировка ассоциативного массива по дате ключа в этом массиве.

И usort, и uasort требуют функцию сортировки, которую вы должны написать и передать как второй параметр. Функция сортировки используется usort и uasort для сравнения каждого элемента в массиве и сохранения результата в виде $ yourArray

  function sortFunction( $a, $b ) { return strtotime($a[1]) - strtotime($b[1]); } uasort($yourArray, "sortFunction"); 

Решение @ 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") 

10.11.1987 -> 10 ноября 1987 г. 11-10-1987 -> 11 октября 1987 г.

 $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); 

Я прыгнул сюда для сортировки ассоциативного массива и нашел эту удивительную функцию на 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