У меня проблема, упорядочивая массив так, как я хочу.
Это пример вывода моего массива: http://pastebin.com/GJNBmqL7
Данные поступают из разных баз данных сразу, поэтому я ограничен тем, как я помещал данные в массив.
[2] всегда содержит временную метку linux. Теперь я хочу, чтобы весь массив был упорядочен по этой метке времени с наименьшим значением.
Как я могу это сделать?
здесь пример 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");
Возможно, было бы проще вставить данные в одну временную таблицу, затем SELECT, с отметкой ORDER BY
Этого можно достичь с помощью следующего кода.
usort($variable, function ($a, $b) { if ($a['timestamp'] == $b['timestamp']) { return 0; } return ($a['timestamp'] < $b['timestamp']) ? 1 : -1;
});
Это приведет к сортировке массива переменной $, предполагая, что метка времени имеет значение $ variable [0] ['timestamp']; Переменная $ [0] [ 'Отметка времени']; и так далее.