Строки чтения PHP из текстового файла

Я пытаюсь найти строку в текстовом файле, а затем распечатать следующие три строки. Например, если текстовый файл имеет

1413X
Peter
858-909-9999
123 Apple road

тогда мой PHP-файл будет принимать идентификатор («1413X») через форму, сравнивать его со строками в текстовом файле — по сути, с фиктивной базой данных — и затем отображать следующие три строки. В настоящее время он отражает только номер телефона (со второй половиной номера неправильно ??). Спасибо за вашу помощь.

<?php
include 'SearchAddrForm.html';

$file = fopen("addrbook.txt", "a+");
$status = false;
$data = '';if (isset($_POST['UserID']))
{
$iD = $_POST['UserID'];
$contact = "";

rewind($file);

while(!feof($file))
{
if (fgets($file) == $iD)
{
$contact = fgets($file);
$contact += fgets($file);
$contact += fgets($file);
break;
}
}

echo $contact;
}

fclose($file);
?>

0

Решение

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

<?php
include 'SearchAddrForm.html';

// $file = fopen("addrbook.txt", "a+");
$file = fopen("addrbook.txt", "r");

$status = false;
$data = '';if (isset($_POST['UserID']))
{
$iD = $_POST['UserID'];
$contact = "";

rewind($file);

$found = false;
$count = 1;
while (($line = fgets($file)) !== FALSE)
{
if ($count == 3) // you read lines you needed after you found id
break;

if ($found == true)
{
$contact .= $line;
$count++
}

if (trim($line) == $iD)
{
$found = true;
$contact = $line;
}
}

echo $contact;
}

fclose($file);
?>

Это пример того, как вы можете достичь этого. И, как вы видите в комментарии, вы должны использовать $ contact. = Value, а не $ contact + = value.
Также вместо чтения вы можете взять весь файл в массив за строкой, используя функцию файл.
А зачем открывать файл для записи?

1

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

Что я сделал:

<?php

//input (string)
$file = "before\n1413X\nPeter\n858-909-9999\n123 Apple road\nafter";

//sorry for the name, couldn't find better
//we give 2 strings to the function: the text we search ($search) and the file ($string)
function returnNextThreeLines($search, $string) {

//didn't do any check to see if the variables are not empty, strings, etc

//turns the string into an array which contains each lines
$array = explode("\n", $string);

foreach ($array as $key => $value) {
//if the text of the line is the one we search
//and if the array contains 3 or more lines after the actual one
if($value == $search AND count($array) >= $key + 3) {
//we return an array containing the next 3 lines
return [
$array[$key + 1],
$array[$key + 2],
$array[$key + 3]
];
}
}

}

//we call the function and show its result
var_dump(returnNextThreeLines('1413X', $file));
1

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