2009-11-25 4 views
2

У меня есть такой массивСортировка многомерного массива в PHP?

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

Что мне нужно сделать, это для сортировки массива, основываясь на [х] [4] (значение метки времени UNIX) массива. Как я могу это достичь?

+0

** Пожалуйста, перечитайте эту ссылку для решения **: http://stackoverflow.com/questions/777597/sorting-an-associative-array-in-php/14972667#14972667 –

ответ

10

использовать функцию сравнения, в этом случае он сравнивает значение Отметка времени 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 руководство пользователя.

0

Только моя первоначальная мысль: оберните каждый из вложенных массивов в объект (экземпляр класса), так что после сортировки по определенному полю (в данном случае, отметке времени unix) вы можете легко получить доступ к другой информации используя ту же ссылку на объект.

Таким образом, ваш вложенный массив массивов может стать массивом объектов, каждый из которых имеет метод сортировки.

0

я боролся с функцией «сравнить» выше, но смог this работать: (. Обратите внимание, что это также нисходящая, а не по возрастанию, сортировка)

function cmp($a, $b) 
{ 
    if ($a['4'] == $b['4']) { 
     return 0; 
    } 
    return ($a['4'] > $b['4']) ? -1 : 1; 
} 

usort($array, "cmp"); 

Смежные вопросы