请问~

WBOY
Release: 2016-06-13 10:26:09
Original
817 people have browsed it

请教~~~~~~~~~~~~~~~~~~~~~~
文件A.txt内容如下
123
222
333
444
555
666
777
888
999
000

文件B.txt内容如下
123
222
444
666
000

不使用数据库,怎么从A.txt中把存在于B.txt的数据剔除掉,实际情况是A,B大概有一万条数据。
得到的结果是C.txt,内容如下
333
555
777
888
999


我的思路是把A,B分别读取到一个数组中,然后遍历A,如果A中某一行数据不在B中,便把该条数据写入C。
不知道这样的思路是不是对的,效率高的

------解决方案--------------------
我和你想的一样,读入数组,然后合并。
考虑到数据量大,你可以分断读取,例如两个文件每次各读100行。然后php有专门的合并函数 array_merge 很方便。
------解决方案--------------------
不用遍历A了吧
array_diff ( array $array1 , array $array2 [, array $ ... ] )
返回数组包括了所有在 array1 中但是不在任何其它参数数组中的值

------解决方案--------------------

PHP code
function w($cont, $filename) {    if (is_writable($filename)) {        if (!$handle = fopen($filename, 'a')) {            echo "不能打开文件 $filename";            exit;        }        if (fwrite($handle, $cont) === FALSE) {            echo "不能写入到文件 $filename";            exit;        }        echo "成功地将 $somecontent 写入到文件$filename";        fclose($handle);    } else {        echo "文件 $filename 不可写";    }}$cont_a = file_get_contents("/path/filenameA");$arrA = explode("\n", $cont_a);$cont_b = file_get_contents("/path/filenameB");$arrB = explode("\n", $cont_b);$arrNewB = array_diff($arrB, $arrA);$cont_newb = implode("\n", $arrNewB);$arrC = array_diff($arrA, $arrB);$cont_c = implode("\n", $arrC);w($cont_newb);w($cont_c);<br><font color="#e78608">------解决方案--------------------</font><br>貌似array_diff函数 + file函数就行了,LZ试下效率如何。<div class="clear">
                 
              
              
        
            </div>
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template