2010-07-19 6 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

이 문장은 다소 모호합니다. "나는 $ 행을 그 행에 써야합니다."실제로 $ 행을 '줄'에 쓰려고하면 무엇을하려고합니까? –

+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

오늘이 오류가 발생하여 게시 된 2 개의 답변을 사용하여 문제를 해결하려고했지만 작동하지 않았습니다. 이 라인이 작동하지 않기 때문에 배열의 인수가 인덱스되지 않기 때문에

<?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이 새를 가지고 있음을 추가했다 나는이로 변경했다 검색된 텍스트 아래의 줄.

관련 문제