>백엔드 개발 >PHP 튜토리얼 >PHP 파일 작업 - 다른 파일의 데이터를 이 파일에 추가

PHP 파일 작업 - 다른 파일의 데이터를 이 파일에 추가

不言
不言원래의
2018-04-04 14:43:551559검색

이 글의 내용은 PHP 파일 작업입니다. 다른 파일의 데이터를 이 파일에 추가하고 이제 모든 사람과 공유하세요. 도움이 필요한 친구들이 참조할 수 있습니다

GitHub 소스 코드
사실 저희 프로그램은 다음에 대한 답변을 기반으로 합니다. 다음 질문:

두 개의 텍스트 파일 A.txt B.txt
A.txt 3천만 줄이 있습니다. userid는 고유하며 userid와 사용자 이름은 아래와 같이 공백으로 구분됩니다.
userid 사용자 이름
1 yi
2 er
3 san
… …
B.txt에는 3천만 줄이 있으며, userid는 고유하고, userid와 realname은 아래와 같이 공백으로 구분됩니다. >                                         해당 사용자 이름은 A.txt에서 찾을 수 있으며 채워져 있습니다. B.txt의 세 번째 열에 시간 복잡도가 나와 있습니다.

우리 프로그램에서 두 파일의 행 데이터는 기본적으로 일대일 대응입니다. 즉, A의 n번째 데이터 행은 B의 n번째 데이터 행에 해당합니다. 이런 식으로 시간은 우리 프로그램의 복잡성은 O(n) 입니다.

하지만 실제 연산에서는 분명히 두 파일의 데이터 라인이 일대일 대응이 아닌 상황이 있을 겁니다. 이 경우에는 시간 복잡도가 O(n)인 가장 간단한 연산만 생각했습니다. ^2) 이 문제를 해결하는 데 더 좋은 알고리즘이 있는지 모르겠습니다.

파일을 읽고 O(1) 또는 O(logn) 쿼리로 데이터 구조로 빌드하면 복잡성은 O(n) 또는 O(nlogn)이 되어야 합니다. 단, 파일이 너무 크면. , 빌드 데이터 구조가 너무 큰 상황을 처리하고 데이터베이스 B-트리 인덱스에서 학습하는 방법은 무엇입니까? B.txt

A.txt 3천만 줄, 사용자 ID는 고유하고 사용자 ID와 사용자 이름은 공백으로 구분됩니다. 아래와 같습니다:

userid username

1 yi

2 er

3 san

… …

B.txt 3천만 줄, 사용자 ID는 고유하며 Userid와 RealName은 아래와 같이 공백으로 구분됩니다.

Userid RealName

1

2
3

3


문구를 작성하고, b.txt에서 userid에 해당하는 사용자 이름을 찾고, A.TXT에서 찾고, B.txt의 세 번째 열을 채우고 시간 복잡도를 지정하세요.

우리 프로그램에서 두 파일의 행 데이터는 기본적으로 일대일 대응입니다. 즉, A의 n번째 데이터 행은 B의 n번째 데이터 행에 해당합니다. 이런 식으로 시간은 우리 프로그램의 복잡성은 O(n) 입니다.

하지만 실제 연산에서는 분명히 두 파일의 데이터 라인이 일대일 대응이 아닌 상황이 있을 겁니다. 이 경우에는 시간 복잡도가 O(n)인 가장 간단한 연산만 생각했습니다. ^2) 이 문제를 해결하는 데 더 좋은 알고리즘이 있는지 모르겠습니다.

파일을 읽고 O(1) 또는 O(logn) 쿼리로 데이터 구조로 빌드하면 복잡성은 O(n) 또는 O(nlogn)이 되어야 합니다. 단, 파일이 너무 크면. , 빌드 데이터 구조가 너무 큰 상황에 대처하는 방법, 데이터베이스 b-트리 인덱스 실습을 통해 알아보세요.

<?php
header("content-type:text/html;charset=utf-8");

function decodeLine(string $lineData, string $delimiter = null)
{    if (is_null($delimiter)) {        $delimiter = &#39; &#39;;
    }    return explode($delimiter, $lineData);
}

function encodeLine(array $dataList, string $delimiter = null)
{    if (is_null($delimiter)) {        $delimiter = &#39; &#39;;
    }    return implode($delimiter, $dataList);
}$testA = fopen(&#39;./TestData/FileOperation/testA.txt&#39;, &#39;r&#39;);$testB = fopen(&#39;./TestData/FileOperation/testB.txt&#39;, &#39;r+&#39;);$tmpFile = tmpfile();//while (($bBuffer = fgets($testB)) != false) {    $bList = decodeLine(trim($bBuffer, "\n\r"));    $tmpList = $bList;    if (($aBuffer = fgets($testA)) != false) {        $aList = decodeLine(trim($aBuffer, "\n\r"));        if ($aList[0] == $bList[0]) {            $strEncoding = mb_detect_encoding($aList[1], [&#39;ASCII&#39;, &#39;UTF-8&#39;, &#39;GB2312&#39;]);            $resStr = mb_convert_encoding($aList[1], &#39;UTF-8&#39;, $strEncoding);
            array_push($tmpList, $resStr."\n");
        }
    }    fwrite($tmpFile, encodeLine($tmpList));
}

rewind($tmpFile);
rewind($testB);while (!feof($tmpFile)) {    $tmpBuffer = fread($tmpFile, 1024);    fwrite($testB, $tmpBuffer);
}fclose($tmpFile);fclose($testA);fclose($testB);

관련 권장 사항:


디렉토리에서 파일을 가져와 상대 경로를 계산하는 PHP 파일 작업 방법

패치 파일 PHP 파일 작업으로 코드 공유 가능

위 내용은 PHP 파일 작업 - 다른 파일의 데이터를 이 파일에 추가의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.