PHP:将两组代码合二为一(实现以某种方式显示文本文件)


PHP: combine two sets of code into one (to achieve displaying text file in a certain way)

我有 2 组代码,它们都可以独立工作,但我需要将它们结合起来,但一直无法做到。

最终结果应该是逐行显示一个文本文件,数组 #,按字母顺序排列(因此数组编号应显示在每行的末尾)。

第一段代码

<?php
$filename="users.txt"; 
$lines = array();
$file = fopen($filename, "r");
while(!feof($file)) { 
    $lines[] = fgets($file,4096);
} 
natcasesort($lines);
$text = implode("<br />", $lines);
print_r($text);
fclose ($file); 
?>

第二段代码

<?php 
 $lines = file('users.txt'); 
 foreach ($lines as $line_num => $line) 
{ 
 print "<font color=red>Line #{$line_num}</font> : " . $line . "<br />'n"; 
 }
 ?> 

有两种简单的方法可以做到这一点。这个仅适用于 PHP>= 5.4.0:

$lines = file('users.txt');
asort($lines, SORT_NATURAL | SORT_FLAG_CASE); // natcasesort that preserves keys!
foreach ($lines as $num => $line) { 
    printf("%s (line #%d)<br>", $line, $num);
}

如果使用早期版本,则可以使用 uasortstrnatcasecmp 实现相同的效果:

$lines = file('users.txt');
uasort($lines, 'strnatcasecmp'); // natcasesort that preserves keys
// the loop is the same

看到它的实际效果

在这两种情况下,想法都是使用维护索引关联的排序函数,以便在对行进行排序后,它们仍按其原始键(即文件中的行号)编制索引。usortuasort都这样做; uasort允许您自己指定排序比较函数,而usort只允许一些内置选项(不包括 PHP <5.4 中的自然排序)。

顺便说一句:请不要再使用<font>标签。