2012-06-08 80 views
0

我遇到問題。我想要做的是讓我的PHP代碼進行搜索,直到找到輸入內容。例如,如果我搜索數字「12」。我希望它能像下面的文件一樣找到其中包含「12」的行。PHP搜索和回顯特定文本

Dark Green = 11 = No = 20, 
Light Blue = 12 = No = 20, 
Lime Green = 13 = No = 20, 
Sensei Gray = 14 = Yes = 0, 

在這種情況下,該行會在它的12:

Light Blue = 12 = No = 20, 

接下來我想要的代碼做它找到的線是它看就是前文後「=」在它的左邊。在這種情況下,我想我的代碼如下:

Light Blue 

我一直想做到這一點,任何幫助,將不勝感激!

+0

您應該使用['爆炸()'](http://php.net/manual/en/ function.explode.php)函數。 – Steve

+0

我同意WojtekT – Drewdin

+0

它看起來像你可能需要一個數據庫表,而不是一個文件。 –

回答

1

嘗試以下

$string = 'Dark Green = 11 = No = 20, 
Light Blue = 12 = No = 20, 
Lime Green = 13 = No = 20, 
Sensei Gray = 14 = Yes = 0'; 


$string = explode(',',$string); 
foreach($string as $row) 
{ 
    preg_match('/^(\D+)\s=\s(\d+)\s=\s(\D+)\s=\s(\d+)/', trim($row), $matches); 
    echo $matches[1];//Dark Green 
    echo $matches[2];//11 
    echo $matches[3];//No 
    echo $matches[4];//20 
} 

代碼在循環使用來檢查這個詞來搜索

就像那個

if($matches[1] == 'Dark Green') 
{ 
    echo $matches[1]; 
} 

if($matches[2] == 11) 
    { 
     echo $matches[2]; 
    } 

(... ) 要獲取文件中的文本嘗試使用

$string = file_get_contents('file.txt'); 
+0

謝謝,它的工作原理!儘管$ matches [1]部分不適用於包含數字的文本。怎樣才能使它與數字一起工作呢? – S17514

0

廣義而言,您可以使用php fgets命令逐行處理任何文本文件。然後,您可以在每行上運行一個操作,使用上面建議的爆炸來查找您的字符串並打印它。

0

嘗試是這樣的

$lines = explode("\n",$filetext); 
$searchString = preg_quote('12','/'); 
foreach($lines as $line) { 
    preg_match("/([^=])\s*=\s*$searchString/"); 
    if($matches[1]) { 
     print $matches[1]; 
     break; 
    } 
} 

其中$ FILETEXT有文字,要麼使用與fgets讀取一行行(那麼你不需要爆炸),或使用的file_get_contents更簡單

0

這裏是preg_grep和explode的混合。

$arr = explode("\n", file_get_contents('file.txt')); 
$matches = preg_grep('/12/', $arr); 

您的匹配項將位於$ matches數組中;

+0

儘管你正在將整個文件讀入內存中...... –

+0

是的,但是如果你使用fgets將文件的部分部分加載到緩衝區中,那麼你可能會錯過匹配。 –

0

使用本:

$data = file("file.txt"); 
$num = 12; 
foreach((array)$data as $key=>$line) { 
    if (strstr($line,"= $num ") || strstr($line," = $num,")) { 
     echo $line; 
     break; 
    } 
}