Сортировка массива PHP по метке времени

У меня проблема с упорядочением массива так, как я хочу.

Это пример вывода моего массива:http://pastebin.com/GJNBmqL7

данные поступают из разных баз данных сразу, поэтому я ограничен в том, как я помещаю данные в массив.

[2] всегда содержит метку времени linux. Теперь я хочу, чтобы весь массив был упорядочен по этой метке времени с самым низким значением.

Как я могу это сделать?

8 ответов


теги функция array_multisort пример:

foreach ($array as $key => $node) {
   $timestamps[$key]    = $node[2];
}
array_multisort($timestamps, SORT_ASC, $array);

используйте usort, который принимает пользовательскую функцию для сортировки массивов:

usort

ваша функция может выглядеть так:

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

вы можете сделать это просто с помощью настраиваемой сортировки. Поэтому, предполагая, что ваша метка данных всегда является индексом 2:

function sortArray($a1, $a2){
    if ($a1[2] == $a2[2]) return 0;
    return ($a1[2] > $a2[2]) ? -1 : 1;
}

usort($array, "sortArray");

usort легче всего работать, но вы также можете проверить функция array_multisort.


используйте usort и создайте свою собственную функцию,http://php.net/manual/en/function.usort.php


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

$data = array( /* your data */ );

usort($data, "cmp");

может быть проще вставить данные в одну временную таблицу, а затем выбрать ее, с порядком по метке времени


Это может быть достигнуто с помощью следующего кода.

usort($variable, function ($a, $b) {
 if ($a['timestamp'] == $b['timestamp']) {
    return 0;
}
return ($a['timestamp'] < $b['timestamp']) ? 1 : -1;

});

это приведет к сортировке массива переменной$, предполагая, что отметка времени находится на $переменная[0]['метку']; $переменная[0]['метку']; и так далее.