2013-12-02 4 views
0

У меня есть текстовый файл ... содержимое следующим образомPHP - поиск текстового файла для содержания

---> t11 ---> x1 ---> 
---> t22 ---> x2 ---> 
---> t33 ---> x3 ---> 
---> t24 ---> x2 ---> 
---> t35 ---> x3 ---> 
---> t46 ---> x4 ---> 

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

<?php 
$file = 'mytext.txt'; 
$searchfor = '---> t2'; 

// the following line prevents the browser from parsing this as HTML. 
header('Content-Type: text/plain'); 

// get the file contents, assuming the file to be readable (and exist) 
$contents = file_get_contents($file); 
// escape special characters in the query 
$pattern = preg_quote($searchfor, '/'); 
// finalise the regular expression, matching the whole line 
$pattern = "/^.*$pattern.*\$/m"; 
// search, and store all matching occurences in $matches 
if(preg_match_all($pattern, $contents, $matches)){ 
    $strArray = explode('---> ',implode($matches[0])); 


echo $strArray[1]; 

} 
else{ 
    echo "No matches found"; 
} 
?> 

выход должен быть чем-то вроде ...

---> t22 
---> t24 
+1

использование 'FOPEN()'/'fgets()' вместо использования 'file_get_contents()', чтобы не загружать весь файл сразу, если у вас есть достаточно большой использовать файл –

+0

файл '()' вместо использования 'file_get_contents()', если у вас есть небольшой файл. Это уже вернет вам массив с каждой строкой в ​​нем. –

+0

Я думаю, что ваши 'implode()' и 'explode()' меняются местами. По крайней мере, вы взорваетесь на '' ---> '', но я не знаю, откуда эта строка. Поэтому, я думаю, вы хотите «implode()» с ним. –

ответ

0

Вы должны использовать fgets(), чтобы просмотреть файл по строке, найти каждую строку индивидуально и отобразить все, что захотите, в случае, если вы ее найдете.

while (!feof($stream)) { 
    echo fgets($stream); //Display each line 
} 

Однако рассмотрите возможность перехода к базе данных с надлежащими возможностями запросов.

0
<?php 
$file = 'mytext.txt'; 
$searchfor = 't2'; 

header('Content-Type: text/plain'); 
$contents = file($file); 
$matches = array(); 
foreach($contents as $lineNo => $line) 
    if (substr(str_replace("---> ","",$line),0,strlen($searchfor)) === $searchfor) 
     $matches[] = str_replace("---> ","",$line); // or use $matches[] = ++$lineNo . ': ' . $line; 
if(count($matches)) 
    foreach($matches as $match) 
     echo $match . "\n"; 
else 
    echo "No matches found"; 
?> 
+0

ваш код не работает .... – Sajeeb

+0

@ user2475714 Я отредактировал свой ответ, так как вы отредактировали свой вопрос OP –

+0

Я снова попробовал ваш код, и я не получил совпадений. Я хочу найти первый столбец и вернуть все слова, которые имеют t2 в начале – Sajeeb

Смежные вопросы