保持一定数量的行

时间:2015-05-28 05:50:56

标签: php

我想保留一个确切的行数,它需要一个文件反转它并回显它,但文件可能会变长,并希望将其限制为多行。

$file = file("update.log");
$file = array_reverse($file);

foreach($file as $f){
 if (stripos($f, "Sale") !== false) {
    $class = "sales";
 } else{
    $class = "row";
 }

 echo "<div class='".$class." scale'>".$f."</div>";
}

3 个答案:

答案 0 :(得分:1)

使用计数器,当它遇到max_lines数字时,会跳出foreach循环。

$file = file("update.log");
$file = array_reverse($file);

$count = 0;
$max_lines = 100;    
foreach($file as $f){
 if ($count >= $max_lines){
  break;
 }
 if (stripos($f, "Sale") !== false) {
    $class = "sales";
 } else{
    $class = "row";
 }
 $count++;

 echo "<div class='".$class." scale'>".$f."</div>";
}

答案 1 :(得分:0)

$file = file("update.log");
$file = array_reverse($file);
$lineLimit = 25;
$lineCounter = 0;

foreach($file as $f){
 if (stripos($f, "Sale") !== false) {
    $class = "sales";
 } else{
    $class = "row";
 }
 echo "<div class='".$class." scale'>".$f."</div>";
 $lineCounter++;
 if($lineCounter > $lineLimit)
    break; //Will exit the loop
}

答案 2 :(得分:0)

我认为这可以更快,更灵活地避免内存问题。您不必阅读文件的每一行,因此您可以使用以下内容:

function viewLastLines($logfile,$maxlines=25) {
    $handle = fopen($logfile, "r");
    fseek($handle, -($maxlines),SEEK_END);
    while (($line = fgets($handle)) !== false)
        $outputlines[]=$line;
    fclose($handle);
    return $outputlines;
}

在你的情况下像这样使用它:

$file = array_reverse(viewLastLines("update.log",100));
foreach($file as $f){
    if (stripos($f, "Sale") !== false) $class = "sales";
    else $class = "row";
    echo "<div class='".$class." scale'>".$f."</div>";
}