2010-07-19 2 views
6

Я пишу код, и мне нужно написать номер для определенной строки. Вот что у меня есть до сих пор:Запись на определенную строку в PHP

<?php 

$statsloc = getcwd() . "/stats/stats.txt"; 
$handle = fopen($statsloc, 'r+'); 

for($linei = 0; $linei < $zone; $linei++) $line = fgets($handle); 
$line = trim($line); 
echo $line; 

$line++; 
echo $line; 

Не знаю, где продолжить после этого. Мне нужно написать $ line для этой строки, сохраняя все остальные строки.

+0

Это утверждение довольно неоднозначно: «Мне нужно написать $ line для этой строки». На что вы на самом деле пытаетесь выполнить «запись строки $ в эту строку?» –

+1

Знаете ли вы, что цикл 'for' выбирает строку с номером $ zone прямо сейчас и ничего не делает? Если это так, есть более простые способы сделать это. – waiwai933

+0

Я в замешательстве. Мне нужно получить доступ к этой строке, вытащить данные из нее, добавить к ней, а затем записать ее обратно. Это все, что мне нужно. – Robert

ответ

14

вы можете использовать файл, чтобы получить файл в виде массива строк, то измените строку вам нужно, и переписать всю партию обратно в файл.

<?php 
$filename = getcwd() . "/stats/stats.txt"; 
$line_i_am_looking_for = 123; 
$lines = file($filename , FILE_IGNORE_NEW_LINES); 
$lines[$line_i_am_looking_for] = 'my modified line'; 
file_put_contents($filename , implode("\n", $lines)); 
+0

Я предположил, что вам нужно изменить строку, а не вводить новую - если вам нужно добавить новый, см. Ответ deceze - как для разницы между join и implode, нет ни одного, join является псевдонимом implode. – nathan

+0

Я выхватил 'FILE_IGNORE_NEW_LINES' из вашего ответа, хорошо подумав о его включении. :) – deceze

+0

@deceze больше всего приветствуется, без проблем и хорошей идеи – nathan

4

Это должно сработать. Это будет довольно неэффективно, если файл слишком велик, так что это зависит от вашей ситуации, если это хороший ответ или нет.

$stats = file('/path/to/stats', FILE_IGNORE_NEW_LINES); // read file into array 
$line = $stats[$offset]; // read line 
array_splice($stats, $offset, 0, $newline); // insert $newline at $offset 
file_put_contents('/path/to/stats', join("\n", $stats)); // write to file 
+0

Я не уверен, как это вписывается в код, который у меня уже есть. Можете ли вы мне помочь? Пожалуйста? – Robert

+0

Прошу прощения, эта статья довольно понятна, вам придется попробовать. – deceze

0

Я столкнулся с этим сегодня и хотел решить, используя два ответа, но это не сработало. Я должен был изменить его к этому:

<?php 
$filepathname = "./stats.txt"; 
$target = "1234"; 
$newline = "after 1234"; 

$stats = file($filepathname, FILE_IGNORE_NEW_LINES); 
$offset = array_search($target,$stats) +1; 
array_splice($stats, $offset, 0, $newline); 
file_put_contents($filepathname, join("\n", $stats)); 
?> 

Поскольку эти линии не работают, так как аргумент массива не является индексом:

$line = $stats[$offset]; 
$lines[$line_i_am_looking_for] = 'my modified line'; 

бы добавить, что +1, чтобы новый строка под искомым текстом.

Смежные вопросы