我正在阅读一个文本文件,然后将其解析为一个网页。文本文件有3个条目。我希望最后一个条目首先出现,所以我首先尝试将文本保存到数组中,然后从最后一个条目读回来。在我看来,我的$ text数组无法从fgets中保存字符串。我无法弄清楚数组的问题是什么,有没有更好的方法呢?
这是我的php代码:
<div class="table-responsive">
结果如下:
<?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:
答案 0 :(得分:0)
首先显示最后一个条目的一种方法是创建一个数组,例如使用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个数组,然后使用1个foreach,则可以使用call_user_func_array和array_merge:
$results = call_user_func_array('array_merge', $results);
foreach ($results as $result) {
echo $result . "<br>";
}
答案 1 :(得分:0)
经过5个多小时的代码编写,测试和谷歌搜索,这是我的最终代码。
首先,它使用&#34; entry =&#34;标记将文本文件读入数组,然后使用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>";
}
?>