Сортировка массива 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, который принимает пользовательскую функцию для сортировки массивов:
ваша функция может выглядеть так:
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]['метку']; и так далее.