Сортировка несортированного текстового файла и переписывание в тот же текстовый файл в отсортированном порядке

У меня есть вопрос. Я изучаю, как читать / писать файлы, но с небольшими проблемами пытаюсь сделать оба одновременно в одном скрипте php. У меня есть текстовый файл со словами вроде этого,

Richmond,Virginia Seattle,Washington Los Angeles,California Dallas,Texas Jacksonville,Florida 

Я написал код для сортировки по порядку, и это будет отображаться в порядке сортировки по городу.

 <?php $file = file("states.txt"); sort($file); for($i=0; $i<count($file); $i++) { $states = explode(",", $file[$i]); echo $states[0], $states[1],"<br />"; } ?> 

Из этого, как я могу переписать эту отсортированную информацию обратно в файл states.txt?

Самый простой способ записать содержимое $file обратно в файл будет использовать file_put_contents в сотрудничестве с implode .

  file_put_contents ("states.txt", implode ($ file)); 

Попробуйте использовать fopen и fwrite.

 $fileWrite = fopen("filePah", "w"); for($i=0; $i<count($file); $i++) { fWrite($fileWrite, $file[i]); } fClose($fileWrite); 
 <?php $file = file("states.txt"); sort($file); $newContent = ""; for($i=0; $i<count($file); $i++) { $states = explode(",", $file[$i]); $newContent .= $states[0] .', '. $states[1] . PHP_EOL; } file_put_contents('states.txt',$newContent); ?> 

PHP: file_put_contents

Попробуйте что-то вроде этого:

 $fo = fopen("filename", "w"); $content = ""; for ($i = 0; $i < count($file); $i++) { $states = explode(",", $file[$i]); $content .= $states[0] . "," . $states[1] . "\n"; } fwrite($fo, $content); fclose($fo); 

это немного расширилось, однако я подумал, что это может быть полезно кому-л. У меня есть плейлист m3u и вам нужны только отдельные строки, отфильтрованные, отсортированные и напечатанные. Кредиты идут к Дьяволу:

 <?php //specify that the variable is of type array $masiv = array(); //read the file $file = '/home/zlobi/radio/pls/all.m3u'; $f = fopen($file, "r"); while ($line = fgets($f)) { //skip rows with #EXT if(strpos($line, "#EXT") !== false) continue; $text = str_replace('.ogg', ' ', $line); $text = str_replace('/home/zlobi/radio/',' ',$text); //add the song as an element in an array $masiv[] = $text; } $f = fclose($f); //sort the array sort($masiv); //pass via the array, take each element and print it foreach($masiv as $pesen) print $pesen.'<br/>'; ?> 

masiv – массив, песен – песня на болгарском языке 🙂 Сначала буквы CAPital отсортированы.

Regads

Как только вы закончите чтение файла в массив путем вызова файла . Вы можете открыть файл для записи с помощью функции fopen , записать в файл с помощью fwrite и закрыть дескриптор файла с помощью fclose :

 <?php $file = file("states.txt"); // read file into array. $fh = fopen('states.txt','w') or die("..."); // open same file for writing. sort($file); for($i=0; $i<count($file); $i++) { $states = explode(",", $file[$i]); echo $states[0], $states[1],"<br />"; fwrite($fh,"$states[0],$states[1] <br />"); // write to file. } fclose($fh); // close file. ?> 

Откройте файл, напишите ему, закройте его (это предполагает, что $ file является переменной из вашего кода):

 $fp = fopen('states.txt', 'w'); for($i=0; $i<count($file); $i++) fwrite($fp, $file[$i]); } fclose($fp); 

И посмотрите http://php.net/manual/en/function.fwrite.php

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

 exec("sort -n " . $pathToOriginalFile . " > " . $pathToSortedFile); 

В принципе, выполните команду команды bash, которая сортирует строки в файле численно. Если вы хотите сохранить данные в исходном файле, выполните следующие действия:

 exec("sort -n " . $pathToOriginalFile . " > " . $pathToSortedFile); exec("rm " . $pathToOriginalFile); exec("mv " . $pathToSortedFile . " " . $pathToOriginalFile); 

Если вы хотите, чтобы в алфавитном порядке исключался вариант -n (–numeric-sort).

 exec("sort " . $pathToOriginalFile . " > " . $pathToSortedFile); 

Для меня команда заняла около 3 секунд, чтобы отсортировать 10 миллионов строк в файле на сервере.

Вы можете найти больше о сортировке здесь http://www.computerhope.com/unix/usort.htm

Надеюсь, поможет.