PHP-строка не сохраняется в архиве - PullRequest
0 голосов
/ 19 мая 2018

Я читаю текстовый файл, а затем анализирую его на веб-странице.Текстовый файл имеет 3 записи.Я хочу, чтобы последняя запись отображалась первой, поэтому я пытаюсь сначала сохранить текст в массив, а затем прочитать его из последней записи.Мне кажется, мой массив $ text не может сохранить строку из fgets.Я не могу понять, в чем проблема с массивом, и есть ли лучший способ сделать это?

Вот мой PHP-код:

<?php
$test = fopen("test.txt", "r") or die("Unable to open file!");

while (! feof($test)){

$line=fgets($test);
parse_str($line);
$c=$entry;
$text=array("zero--");

if (strncasecmp( $line, "entry", 5)){

$text[$c] .= $line;
echo "c:". $c. $line. "<br>";
}

}

global $text;
echo "t:". $text[0];
echo "t:". $text[1];

?>

Вот результат:

c:1 first entry
c:1 It's sunny today
c:1
c:2 Second entry
c:2 It's sunny today too
c:2 Hi, how are you?
c:2
c:3 last entry
c:3 bye
c:3
t:zero--t: 

Вот мой тестовый файл.

entry=1
first entry
It's sunny today

entry=2
Second entry
It's sunny today too
Hi, how are you?

entry=3 
last entry
bye

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

После более чем 5 часов написания кода, тестирования и поиска в Google это мой последний работающий код.

Сначала он считывает текстовый файл в массив с использованием тега "entry =", а затемон повторяет последнюю позицию, используя цикл for.Вот и все.Я также добавил оператор if, чтобы игнорировать пустую строку.

<?php
$new = file("com/test.txt");

foreach ( $new as $a){

parse_str($a);
$c=(integer )$entry;

    if (strncasecmp( $a, "entry", 5) !=0){

    if(!(ctype_space ( $a ))){
    $text[$c] .= $a. "<br>";
    }
    }
    }

for( $i=$c; $i>0; $i--){
echo $text[$i] . "<br>";
}
?>   
0 голосов
/ 20 мая 2018

Один из подходов к отображению последней записи - создать массив и, например, использовать конечную цифру от entry_1 в качестве ключа массива.Поскольку массив не может иметь повторяющихся ключей, он всегда должен быть уникальным.

При чтении строк файла вы можете создать пустой массив для каждого ключа и заполнить массив.В конце вы можете использовать krsort сортировку массива по ключу в обратном порядке.

$test = fopen("test.txt", "r") or die("Unable to open file!");
$results = [];
while (!feof($test)) {
    $line = fgets($test);
    if (strncasecmp($line, "entry=", 6) === 0) { //Compare the first 6 characters
        $index = intval(substr($line, 6), 10); //$index would be 1, 2 or 3
        $results[$index] = []; // Create empty array placeholder to be filled
    }
    $results[$index][] = $line; // Add the line to the current placeholder
}
krsort($results);

foreach ($results as $result) {
    foreach ($result as $item) {
        echo $item . "<br>";
    }
}

Если вы хотите сгладить массив массивов до 1 массива, а затем использовать 1foreach, вы можете использовать call_user_func_array и array_merge :

$results = call_user_func_array('array_merge', $results);

foreach ($results as $result) {
    echo $result . "<br>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...