2012-06-08 59 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; 
    } 
}