2014-11-23 2 views
2

Я пытаюсь читать строки из txt-файла и возвращать каждую строку, на которой есть определенная строка. В этом случае я ищу "1992"Получите каждую строку со строкой в ​​PHP

alt.txt

1223 abcd 
1992 dcba 
1992 asda 

file.php

function getLineWithString($fileName, $str) { 
    $lines = file($fileName); 
    foreach ($lines as $lineNumber => $line) { 
     if (strpos($line, $str) !== false) { 
      return $line; 
     } 
    } 
    return -1; 
} 

Когда я бегу PHP, я получаю "1992 ДХБС" как возвращение , когда я хочу получить массив с каждой строкой. $ line [0] будет «1992 dcba», а $ line [1] будет «1992 asda». Как я могу это сделать?

+0

Ну, у вас уже есть свой ответ. '$ lines' - это массив actualy – DarkBee

ответ

3

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

function getLineWithString($fileName, $str) { 
    $results = array(); 
    $lines = file($fileName); 
    foreach ($lines as $lineNumber => $line) { 
     if (strpos($line, $str) !== false) { 
      $results[] = $line; 
     } 
    } 
    return $results; 
} 
+0

Спасибо. Как мне теперь получить, скажем, второе в массиве при использовании функции? Я попытался сделать 'getLineWithString ('alt.txt', $ match_id) [1]', но это только что дало мне ошибку об неожиданном '['. – Choops

+0

Чтобы использовать разыменование разметки массива, как ваш запрос спрашивает, вам нужен PHP 5.4 или выше (что вы действительно должны делать в любом случае, поскольку все более ранние версии не поддерживаются) –

3

То, что вы сейчас делаете, возвращается, как только он находит определенную строку. То, что вы хотите сделать, это поместить строку в массив и вернуть массив. Таким образом, вы получите следующее:

function getLineWithString($fileName, $str) { 
    $lines = file($fileName); 
    $returnLines = array(); 

    foreach ($lines as $lineNumber => $line) { 
     if (strpos($line, $str) !== false) { 
      $returnLines[] = $line; 
     } 
    } 
    return count($returnLines) > 0 ? $returnLines : -1; 
} 

Я добавил одну строку, если заявление о возврате, так что вы все равно будете возвращать -1, если не было добавлено ничего.

3

Другой способ использования preg_grep

$lines = file('alt.txt'); 
$results = preg_grep("/1992/", $lines); 

preg_grep сохранит оригинальные ключи в возвращаемом массиве. Если вы не хотите, чтобы для переопределения возвращаемого массива добавляли следующее:

$results = array_values($results); 
Смежные вопросы