Это должно работать для вас:
Здесь я сначала получить файл в массив с file()
, где каждая строка является одним из элементов массива. Там я игнорирую пустые строки и новые строковые символы в конце каждой строки.
После этого я сортирую массив с usort()
. Где я сначала получаю все даты и время от каждой строки на explode()
'ing. После этого я просто получаю временную метку каждой даты с помощью strtotime()
и сравниваю ее, чтобы друг друга.
В конце я просто сохраняю файл с file_put_contents()
, где я также добавляю новый символ строки в конце каждой строки с array_map()
.
<?php
$lines = file("test.txt", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
usort($lines, function($a, $b){
list($aDate, $aTime) = explode(" ", explode("|", $a)[substr_count($a, "|")]);
list($bDate, $bTime) = explode(" ", explode("|", $b)[substr_count($b, "|")]);
if(strtotime("$aDate $aTime") == strtotime("$bDate $bTime"))
return 0;
return strtotime("$aDate $aTime") < strtotime("$bDate $bTime") ? 1 : -1;
});
file_put_contents("test.txt", array_map(function($v){return $v . PHP_EOL;}, $lines));
?>
Боковые ноты:
Я бы порекомендовал вам сохранить эти данные в базу данных, где она много гибкой сортировки и получения данных!
EDIT:
Для людей, у которых есть версия PHP (echo phpversion();
) под < 5.3, просто измените анонимные функции для нормальных функций и передать имя функции в виде строки, как это:
<?php
$lines = file("test.txt", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
function timestampCmp($a, $b) {
$aExploded = explode("|", $a);
$bExploded = explode("|", $b);
list($aDate, $aTime) = explode(" ", $aExploded[substr_count($a, "|")]);
list($bDate, $bTime) = explode(" ", $bExploded[substr_count($b, "|")]);
if(strtotime("$aDate $aTime") == strtotime("$bDate $bTime"))
return 0;
return strtotime("$aDate $aTime") < strtotime("$bDate $bTime") ? 1 : -1;
}
function addEndLine($v) {
return $v . PHP_EOL;
}
usort($lines, "timestampCmp");
file_put_contents("test.txt", array_map("addEndLine", $lines));
?>
Я получаю сообщение об ошибке: Ошибка синтаксиса: ошибка синтаксиса, неожиданный T_FUNCTION в ...... в строке 5 – Albance
@Albance перезагрузите мой ответ, попробуйте/используйте код под редактированием. – Rizier123
спасибо soo много !! :) – Albance