2013-11-21 4 views
1

Представьте У меня есть текстовый файл со следующим содержимым:PHP записи в файл в определенном месте

Hello 
How are you 
Paris 
London 

И я хочу, чтобы писать под Парижем, поэтому Париж имеет индекс 2, и я хочу написать в 3.

в настоящее время у меня есть это:

$fileName = 'file.txt'; 
$lineNumber = 3; 
$changeTo = "the changed line\n"; 

$contents = file($fileName); 
$contents[$lineNumber] = $changeTo; 

file_put_contents($fileName, implode('',$contents)); 

Но он изменяет только конкретную строку. И я не хочу изменять, я хочу написать новую строку и позволить остальным оставаться там, где они есть.

Как я могу это сделать?

Редактировать: Решено. В очень простом способе:

$contents = file($filename);  
$contents[2] = $contents[2] . "\n"; // Gives a new line 
file_put_contents($filename, implode('',$contents)); 

$contents = file($filename); 
$contents[3] = "Nooooooo!\n"; 
file_put_contents($filename, implode('',$contents)); 
+0

использования [array_splice()] (http://www.php.net/function.array-splice) вводить новые записи в массив $ содержания –

+0

См Http: // StackOverflow. com/questions/3797239/insert-new-item-in-array-on-any-position-in-php – jszobody

+0

http://stackoverflow.com/questions/2149233/how-to-add-an-array-value- to-the-the-the-the-the-array больше подходит, я думаю @jszobody – m59

ответ

2

Вы должны проанализировать содержимое файла, поместить содержимое в новом массиве и когда номер строки вы хотите придумывает, вставить новое содержание в этот массив. Затем сохраните новое содержимое в файле. Скорректированный код ниже:

$fileName = 'file.txt'; 
$lineNumber = 3; 
$changeTo = "the changed line\n"; 

$contents = file($fileName); 

$new_contents = array(); 
foreach ($contents as $key => $value) { 
    $new_contents[] = $value; 
    if ($key == $lineNumber) { 
    $new_contents[] = $changeTo; 
    } 
} 

file_put_contents($fileName, implode('',$new_contents)); 
+0

Спасибо за помощь. – user2902515

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