如果直接使用file_get_contents來(lái)讀取文件,那么在文件很大的時(shí)候會(huì)很占內(nèi)容,比如這個(gè)文件有1GB的時(shí)候。
專業(yè)領(lǐng)域包括成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、商城網(wǎng)站定制開(kāi)發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開(kāi)發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開(kāi)發(fā)公司不同,創(chuàng)新互聯(lián)建站的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。
這個(gè)時(shí)候使用傳統(tǒng)的文件操作方式就好的多,因?yàn)槭遣檎衣?,逐行讀取匹配應(yīng)該也是可以的,下面是我的一個(gè)建議,不知道是否滿足你的要求,可以看下:
//
需要查找的內(nèi)容
$search
=
'bcd';
//
打開(kāi)文件
$res
=
fopen('a.txt',
'r');
while
($line
=
fgets($res,
1024))
{
//
根據(jù)規(guī)則查找
if
(strpos($line,
$search)
===
0)
{
//
根據(jù)既定規(guī)則取得需要的數(shù)據(jù)
echo
substr($line,
4,
-1);
//
這里就是你想得到的
break;
}
}
//
關(guān)閉文件
fclose($res);
首先聲明,我下面的代碼是以你的那十行數(shù)據(jù)為基礎(chǔ),測(cè)試通過(guò)的。但是我得把它的局限說(shuō)一下。
編碼的時(shí)候,我是根據(jù)你的每一行的規(guī)律來(lái)的。每行用6個(gè)數(shù)據(jù)分隔7個(gè)部分的內(nèi)容,所以,每個(gè)部分不能再有逗號(hào)了(當(dāng)然這個(gè)危險(xiǎn)主要來(lái)自標(biāo)題,不過(guò)我看你標(biāo)題分隔的時(shí)候都是空格或!)
你直接運(yùn)行吧!
?PHP
$file_name="data.txt"; //假設(shè)你的數(shù)據(jù)是存在這個(gè)文件中的
$fp=fopen($file_name,'r');
while(!feof($fp)) //文件全部要讀完
{
$buffer=fgets($fp,1024); //獲得一行
$period = explode(",",$buffer); //以逗號(hào)分隔分行內(nèi)容
if($period[6]!=1){ //找到第7部分的內(nèi)容,如果不是1,就輸出當(dāng)然這個(gè)也是開(kāi)關(guān),你可以設(shè)置為1時(shí)輸出
echo $buffer."br";
}
}
fclose($fp); //關(guān)閉文件流
?
如果文件不是太大的話,可以這樣寫(xiě):
?php
$arr=file('a.txt'); //文本文件,請(qǐng)修改合適的名字和位置
$n=count($arr);
for ($i=0;$i5;$i++) echo $arr[rand(0,$n)]."br';
?
?php
$c?=?getLine('./a.txt',?10);?//?讀取a.txt文件第10行內(nèi)容
echo?$c;
/**
*?獲取指定行內(nèi)容
*
*?@param?$file?文件路徑
*?@param?$line?行數(shù)
*?@param?$length?指定行返回內(nèi)容長(zhǎng)度
*/
function?getLine($file,?$line,?$length?=?4096){
$returnTxt?=?null;?//?初始化返回
$i?=?1;?//?行數(shù)
$handle?=?@fopen($file,?"r");
if?($handle)?{
while?(!feof($handle))?{
$buffer?=?fgets($handle,?$length);
if($line?==?$i)?$returnTxt?=?$buffer;
$i++;
}
fclose($handle);
}
return?$returnTxt;
}