2012-07-27 45 views
1

我目前使用下面的PHP代碼從一個.htm文件恢復和格式輸出只能持續50項:PHP的foreach()返回

<?php 
$es = "</span>"; 
$lines = file("http://www.example.com/log.htm", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
foreach($lines as $line){ 
list($date, $nick, $message) = explode(" ", $line, 3); 
$str = substr($nick, 4, 1); 
if($str=="+"){ 
    $nickspan = '<span style="color:teal">'; 
    $nick = substr_replace($nick, "", 2, 2); 
    echo("$date $nickspan$nick$es $message <br/> 
    "); 
} else { 
    if($str=="@"){ 
    $nickspan = '<span style="color:#F20707">'; 
    $nick = substr_replace($nick, "", 2, 2); 
    echo("$date $nickspan$nick$es $message <br/> 
    "); 
} else { 
    $str = substr($nick, 3, 1); 
    if($str=="*"){ 
    $nickspan = '<span style="color:purple">'; 
    $nick = substr_replace($nick, "", 1, 2); 
    echo("$date $nickspan$nick $message$es <br/> 
    "); 
    } else { 
     $nickspan = '<span style="color:grey">'; 
     $str = substr($nick, 2, 2); 
     if($str=="03"){ 
     $nick = substr_replace($nick, "", 2, 2); 
     } 
     echo("$date $nickspan$nick$es $message <br/> 
     "); 
    } } } } 
?> 

我將如何改變這種只顯示最後50行,而不是完全列出本質上是日誌文件的所有內容?

+0

當您對負數值使用'array_slice'時,它將從結尾停止'n'個元素。 – 2012-07-27 01:52:04

回答

2

您正在尋找的array_slice功能:

array_slice()從陣列陣列指定偏移返回元素的順序...

$lines = file(...); 
$lines = array_slice($lines, -50); 
+0

完美,正是我所需要的! – FearFree 2012-07-27 02:04:16

2

使用array_slice()在運行foreach() { }循環之前切斷$lines的最後50個元素。

$lines = array_slice($lines, -50); 
+0

這是不是返回前50,而不是最後? (http://codepad.org/kyJUkgVW)...沒關係,你修好了。 – 2012-07-27 01:51:40

0

另一種選擇是做計算並且跳過除X之外的所有最後一個:

$last = 50; 
$count = count($lines);  
foreach ($lines as $line) 
{ 
    if ($count-- > $last) continue; 
    ...