Php получает значение из текстового файла

У меня есть этот текстовый файл:

foo: bar el: macho bing: bong cake color: blue berry mayo: ello 

И я то, что я пытаюсь сделать, это то, что если я «смотрю» на foo, он возвращает bar (если я ищу bing, он должен вернуть bong). Способ, который пытался выполнить это, – это сначала поиск по файлу, возврат строки с результатом, поместить его в строку и удалить все до «:» и отобразить строку.

 // What to look for $search = 'bing'; // Read from file $lines = file('file.txt'); foreach($lines as $line) { // Check if the line contains the string we're looking for, and print if it does if(strpos($line, $search) !== false) echo $line; $new_str = substr($line, ($pos = strpos($line, ',')) !== false ? $pos + 1 : 0); } echo "<br>"; echo "bing should return bong:"; echo $new_str; 

Но это не сработает. Здесь просто одна из многих вещей, которые я пробовал.

Источники: много ссылок на stackoverflow и сопоставимые поисковые запросы:
https://www.google.com/search?client=opera&q=php+remove+everything+after
https://www.google.com/search?client=opera&q=php+search+text+file+return+line

Я задал вопрос раньше, но ответы для меня «профессиональны», мне действительно нужно noob-proof решение / ответ. Я пытался понять его весь день, но я просто не могу заставить это работать.

Редактировать: Решено! Большое вам спасибо за ваше время и помощь, я надеюсь, что это может быть полезно кому-то еще!

Solutions Collecting From Web of "Php получает значение из текстового файла"

Это должно работать с тем, что вы ищете, я тестировал его на своем сервере, и, похоже, он соответствует тому, что вы ищете.

 $lines_array = file("file.txt"); $search_string = "bing"; foreach($lines_array as $line) { if(strpos($line, $search_string) !== false) { list(, $new_str) = explode(":", $line); // If you don't want the space before the word bong, uncomment the following line. //$new_str = trim($new_str); } } echo $new_str; ?> 

Я бы сделал это так:

 foreach($lines as $line) { // explode the line into an array $values = explode(':',$line); // trim the whitspace from the value if(trim($values[1]) == $search) { echo "found value for ".$search.": ".$values[1]; // exit the foreach if we found the needle break; } } 
  $search = 'bing'; // Read from file $lines = file('text.txt'); $linea=''; foreach($lines as $line) { // Check if the line contains the string we're looking for, and print if it does if(strpos($line, $search) !== false) { $liner=explode(': ',$line); $linea.= $liner[1]; } } echo 'Search returned: '. $linea; 

Объяснение: – $ linea var создается до цикла, и он будет содержать результат поиска. Если значение найдено в строке – взорвать строку и сделать массив, получить второй var из массива, поместить его в переменную контейнера результатов поиска.

Поскольку ваши данные почти YAML [ см. Lint ], вы можете использовать синтаксический анализатор , чтобы получить связанный массив PHP.

Но если вы можете пойти и с вашим решением:

  // What to look for $search = 'bing'; // Read from file $lines = file('file.txt'); foreach($lines as $line) { // Check if the line contains the string we're looking for, and print if it does if(strpos($line, $search) !== false){ echo array_pop(explode(":", $line)); } } 

Использовать fgetcsv :

 $bits = array(); if (($handle = fopen('t.txt','r')) !== FALSE) { while (($data = fgetcsv($handle, 0, ":")) !== FALSE) { $bits[$data[0]] = $data[1]; } } # Now, you search echo $bits['foo']; 

$bits будет иметь ключ для каждой разделенной части, что делает вашу конечную цель довольно простой. Вот как это выглядит:

 Array ( [foo] => bar [el] => macho [bing] => bong [cake color] => blue berry [mayo] => ello )