У меня есть вопрос. Я изучаю, как читать / писать файлы, но с небольшими проблемами пытаюсь сделать оба одновременно в одном скрипте 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
Надеюсь, поможет.