我有 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);
}
如果使用早期版本,则可以使用 uasort
和 strnatcasecmp
实现相同的效果:
$lines = file('users.txt');
uasort($lines, 'strnatcasecmp'); // natcasesort that preserves keys
// the loop is the same
看到它的实际效果。
在这两种情况下,想法都是使用维护索引关联的排序函数,以便在对行进行排序后,它们仍按其原始键(即文件中的行号)编制索引。usort
和uasort
都这样做; uasort
允许您自己指定排序比较函数,而usort
只允许一些内置选项(不包括 PHP <5.4 中的自然排序)。
顺便说一句:请不要再使用<font>
标签。