foreach — Как сбросить количество строк в каждом файле, используя переполнение стека

У меня есть код PHP, который читает несколько текстовых файлов и ищет запрос пользователя на слово, если слово существует, код будет отображать запрошенное слово с номером строки и именем файла.

код работает отлично, но проблема в номере строки, потому что система берет весь текстовый файл и объединяет его в один файл и продолжает считать номер строки.

я хочу, чтобы система запускалась с первой строки в каждом файле

пример :

слово محلي существует в 7 файлах в одной строке 13
система отображает это:

  • слово محلّي существует в строке [13] в 4-4-2017.txt
  • слово محلّي существует в строке [77] в арабском text.txt
  • слово محلّي существует в строке [175] в XXXX10-4-2017.txt
  • слово محلّي существует в строке [240] в XXXX5-4-2017.txt
  • слово محلّي существует в строке [302] в XXXX6-4-2017.txt
  • слово محلّي существует в строке [367] в XXXX7-4-2017.txt
  • слово محلّي существует в строке [431] в XXXX-08-04-2017.txt

все же это слово существует во всех этих файлах в строке 13

<?php

$line = 1;

if(isset($_POST["search"]))
{
$search =$_POST['name'];
foreach(glob($_SERVER['DOCUMENT_ROOT']."/readfiletest/*.txt") as $txts)
{
$myFileLink = fopen($txts, 'r');

while(!feof($myFileLink))
{
$myFileContents = fgets($myFileLink);
if( preg_match_all('/('.preg_quote($search,'/').')/i', $myFileContents, $matches))
{

foreach($matches[1] as $match)
{
echo "the word  $match exist on line [$line] in  ";

}
echo basename ($txts) . "<br>".PHP_EOL;
//++$line;
}

++$line;

}fclose($myFileLink);

}
}

?><html>
<head>
</head>
<meta http-equiv="Content-Language" content="ar-sa">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<body>
<form action="index.php" method="post">
<p>enter your string <input type ="text"  id = "idName"  name="name" /></p>
<p><input type ="Submit" name ="search" value= "Search" /></p>
</form>
</body>
</html>

-1

Решение

Измените свой код PHP на это. Надеюсь, это поможет.

<?php
$line = 1;
if(isset($_POST["search"]))
{
$search =$_POST['name'];
echo "the word  $search exist on <br><br>";
foreach(glob($_SERVER['DOCUMENT_ROOT']."/readfiletest/*.txt") as $txts)
{
$myFileLink = fopen($txts, 'r');
while(!feof($myFileLink))
{
$files[] = basename($txts);
$myFileContents = fgets($myFileLink);
if( preg_match_all('/('.preg_quote($search,'/').')/i', $myFileContents, $matches))
{
foreach($matches[1] as $match)
{
//echo "line [$line] in  ";
$lines[str_replace(" ", "_", basename($txts))][] = $line;
}
//echo basename($txts) . "<br>".PHP_EOL;
}
++$line;
}
fclose($myFileLink);
}
}
?>

и в теле добавить это

<?php if(isset($_POST["search"]) && !empty($files)): ?>
<table border="1">
<thead>
<tr>
<td>File Name</td>
<td>Line No.</td>
</tr>
</thead>
<tbody>
<tr>
<?php foreach ($files as $name): ?>
<td><?= $name; ?></td>
<td><?= implode(', ', $lines[str_replace(" ", "_", $name)]); ?></td>
<?php endforeach ?>
</tr>
</tbody>
</table>
<?php endif; ?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]