txt 파일의 각 줄을 새 배열 요소로 읽습니다.


118

텍스트 파일의 모든 줄을 배열로 읽고 각 줄을 새 요소에 넣으려고합니다.
지금까지 내 코드.

<?php
$file = fopen("members.txt", "r");
$i = 0;
while (!feof($file)) {

$line_of_text = fgets($file);
$members = explode('\n', $line_of_text);
fclose($file);

?>

1
코드가있는 그대로 배열에 저장되어 있습니까? 어떤 특정한 문제가 있습니까?
Chris Bornhoft

1
경고 : fopen의 FALSE는 경고를 발행하고 여기서 무한 루프가 발생합니다. php.net/manual/en/function.feof.php
Gjermund Dahl

스레드의 날짜에도 불구하고 이스케이프 시퀀스로 구문 분석 '\n\'하려면 a 여야하는 동안은 폭발하지 않습니다 "\n".
codekandis

답변:


397

당신은 특별한 처리를 필요로하지 않는 경우, 이것은 당신이 찾고있는 무엇을해야합니까

$lines = file($filename, FILE_IGNORE_NEW_LINES);

file()배열하는 데 file_get_contents+ 보다 상당히 느린 것 같습니다explode
Ron

@Ron 동의합니다. 다시 말하지만, 모든 요청에서 이런 식으로 파일을 읽어서는 안됩니다. 솔루션이 최적이라고해도 어리석은 일입니다. 파일의 내용은 메모리 캐시 또는 데이터베이스에 저장되어야합니다. PHP조차도 파싱 된 파일의 내용을 저장합니다. 내 말은, 우리는 PHP 4.3에서 멀리 떨어져 있습니다
Yanick Rochon

35

내가 찾은 가장 빠른 방법은 다음과 같습니다.

// Open the file
$fp = @fopen($filename, 'r'); 

// Add each line to an array
if ($fp) {
   $array = explode("\n", fread($fp, filesize($filename)));
}

여기서 $ filename은 파일의 경로 및 이름입니다. ../filename.txt.

텍스트 파일을 설정 한 방법에 따라 \ n 비트를 가지고 놀아야 할 수도 있습니다.


1
"\ n"대신 "PHP_EOL"을 사용합니다. $ array = explode (PHP_EOL, fread ($ fp, 파일 크기 ($ filename)));
Fabian Harmsen

감사합니다 Drew, 많은 기능을 시도한 후 귀하의 기능이 유일하게 작동했습니다. 내 검색어는 \ n 대신 <br>입니다. 내 파일은 하나의 큰 값 배열로만 읽히고 전체 텍스트는 하나의 배열 항목 $ myarr [0]에 불과하므로 단일 항목에서 셔플 링이 작동하지 않았습니다. 누군가에게 도움이되기를 바랍니다. 다시 한 번 감사드립니다.
washere

27

이것을 사용하십시오 :

$array = explode("\n", file_get_contents('file.txt'));

26
$yourArray = file("pathToFile.txt", FILE_IGNORE_NEW_LINES);

FILE_IGNORE_NEW_LINES각 배열 요소의 끝에 줄 바꿈을 추가하지 마십시오. 빈 줄을 건너 뛰는 데
사용할 수도 있습니다FILE_SKIP_EMPTY_LINES

여기 참조


23
<?php
$file = fopen("members.txt", "r");
$members = array();

while (!feof($file)) {
   $members[] = fgets($file);
}

fclose($file);

var_dump($members);
?>

1
좋아요 완벽하게 작동합니다. 감사합니다. 그러나 vaiable =을 배열 요소로 설정해야합니다. $ var = $ ary [1]; 작동하지 않습니다. ary [1] = "테스트". 도움이된다면.
Dan

1
카운터를 직접 실행하고 배열에 인덱스 설정
Prasad

7
$lines = array();
while (($line = fgets($file)) !== false)
    array_push($lines, $line);

분명히 먼저 파일 핸들을 만들고 $file.


7

다음과 같이 쉽습니다.

$lines = explode("\n", file_get_contents('foo.txt'));

file_get_contents() -전체 파일을 문자열로 가져옵니다.

explode("\n")-구분 기호로 문자열을 분할합니다 "\n".-줄 바꿈에 대한 ASCII-LF 이스케이프는 무엇입니까?

그러나주의하십시오-파일에 UNIX -Line 끝 이 있는지 확인하십시오 .

경우 "\n"제대로 작동하지 않습니다 당신은 다른 줄 바꿈 OF2 코딩이 당신은 시도 할 수 있습니다 "\r\n", "\r"또는"\025"


3
$file = __DIR__."/file1.txt";
$f = fopen($file, "r");
$array1 = array();

while ( $line = fgets($f, 1000) )
{
    $nl = mb_strtolower($line,'UTF-8');
    $array1[] = $nl;
}

print_r($array);

1

올바른 길을 가고 있었지만 게시 한 코드에 몇 가지 문제가있었습니다. 우선 while 루프에는 닫는 대괄호가 없습니다. 둘째, $ line_of_text는 모든 루프 반복으로 덮어 쓰여지며, 이는 루프에서 =를. =로 변경하여 수정됩니다. 셋째, 실제 개행 문자가 아니라 리터럴 문자 '\ n'을 분해합니다. PHP에서 작은 따옴표는 리터럴 문자를 나타내지 만 큰 따옴표는 실제로 이스케이프 된 문자와 변수를 해석합니다.

    <?php
        $file = fopen("members.txt", "r");
        $i = 0;
        while (!feof($file)) {
            $line_of_text .= fgets($file);
        }
        $members = explode("\n", $line_of_text);
        fclose($file);
        print_r($members);
    ?>

1
    $file = file("links.txt");
print_r($file);

이것은 txt 파일을 배열로 받아들입니다. 따라서 links.txt 파일에 무엇이든 쓰십시오 (한 요소에 한 줄 사용),이 페이지를 실행하십시오. :) 배열은 $ file이됩니다.


0

이것은 여기에서 꽤 잘 다루었지만 여기에 나열된 것보다 더 나은 성능이 정말로 필요하다면 strtok.

$Names_Keys = [];
$Name = strtok(file_get_contents($file), "\n");
while ($Name !== false) {
    $Names_Keys[$Name] = 0;
    $Name = strtok("\n");
}

이것은 파일이 \n개행 문자로 저장 되었다고 가정하고 (필요에 따라 업데이트 할 수 있음) 단어 / 이름 / 행을 값 대신 배열 키로 저장하므로 룩업 테이블을 사용 isset하여 in_array.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.