2012-06-08 3 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 и взрывается.

$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; 
    } 
} 
Смежные вопросы