PHP поиск и эхо конкретного текста

У меня проблема. Я хочу, чтобы мой PHP-код выполнял поиск до тех пор, пока не найдет введенное. Например, если я искал число «12.» Я хочу, чтобы он вошел в файл, подобный приведенному ниже, и нашел строку со знаком "12". в этом.

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,

Следующее, что я хочу сделать от кода после того, как он найдет строку, - это прочитать текст перед & quot; = & quot; знак слева от него. В этом случае я хотел бы, чтобы мой код читал:

Light Blue

Я всегда хотел сделать это, и любая помощь была бы очень признательна!

 Drewdin08 июн. 2012 г., 20:50
Я согласен с ВойтекТ
 Madara Uchiha♦08 июн. 2012 г., 21:20
Похоже, вам может понадобиться таблица базы данных, а не файл.
 Ja͢ck08 июн. 2012 г., 21:29
Насколько большой файл и как часто он обновляется?
 Steve08 июн. 2012 г., 20:50
Вы должны использоватьexplode() функция.

Ответы на вопрос(5)

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

В общих чертах, вы можете использовать команду php fgets для обработки любого текстового файла построчно. Затем вы можете запустить операцию в каждой строке, используя разнесение, как предложено выше, чтобы найти вашу строку и распечатать ее.

Решение Вопроса

$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];
    }

(...) To get the text in the file try use

    $string = file_get_contents('file.txt');
 S1751409 июн. 2012 г., 18:31
Спасибо, это работает! Хотя часть $ match [1] не сработает для текста, в котором есть числа. Как сделать так, чтобы он работал и с числами?

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

Ваши совпадения будут в массиве $ match;

 08 июн. 2012 г., 21:10
Да, но если вы используете fgets для загрузки частичных частей файла в буфер, вы можете пропустить совпадение.
 08 июн. 2012 г., 21:04
хотя тогда вы читаете весь файл в память ...

$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

Ваш ответ на вопрос