У меня такой массив
array(5) { [0]=> array(5) { [0]=> string(7) "jannala" [1]=> string(10) "2009-11-16" [2]=> string(29) " <p>Jotain mukavaa.</p> " [3]=> int(12) [4]=> int(1270929600) } [1]=> array(5) { [0]=> string(7) "jannala" [1]=> string(10) "2009-11-16" [2]=> string(51) " <p>Saapumiserä II/09 astuu palvelukseen</p> " [3]=> int(11) [4]=> int(1270929600) } ... }
Что мне нужно сделать, так это отсортировать массив на основе [x] [4] массива (значение временной метки unix). Как я могу это достичь?
используйте функцию сравнения, в этом случае он сравнивает значение временной метки unix массива:
function compare($x, $y) { if ( $x[4] == $y[4] ) return 0; else if ( $x[4] < $y[4] ) return -1; else return 1; }
а затем вызовите его с помощью функции usort
например:
usort($nameOfArray, 'compare');
Эта функция сортирует массив по его значениям, используя предоставленную пользователем функцию сравнения. Если массив, который вы хотите отсортировать, нужно отсортировать по некоторым нетривиальным критериям, вы должны использовать эту функцию.
Взято из PHP: usort manual.
Только моя первоначальная мысль: оберните каждый из вложенных массивов в объект (экземпляр класса), так что после сортировки по определенному полю (в данном случае, отметке времени unix) вы можете легко получить доступ к другой информации, используя тот же ссылка на объект.
Таким образом, ваш вложенный массив массивов может стать массивом объектов, каждый из которых имеет метод «сортировки».
Я боролся с функцией «сравнить» выше, но смог получить эту работу:
function cmp($a, $b) { if ($a['4'] == $b['4']) { return 0; } return ($a['4'] > $b['4']) ? -1 : 1; } usort($array, "cmp");
(Обратите внимание, что это также нисходящий, а не восходящий, сортировка.)