2011-05-07 160 views
1

我有服務器的輸出,看起來像這樣
PLAYER_ENTERED name ipaddress username
PHP:將字符串分割並打印

如果字符串包含PLAYER_ENTERED總是會有串在3個空格分隔它(這可怎麼修改,以便它這是否也是這樣?)。我只想打印出ipaddress和用戶名(最後2個部分)。 這怎麼辦?


這是代碼打印出整個事情:

$q = $_REQUEST["ipladder"]; 
$f = fopen("ladderlog.txt", "r"); 
while (($line = fgets($f)) !== FALSE) 
{ 
    if (strstr($line, $q)) 
    { 
     print "<li>$line"; 
    } 

我該使用爆炸(),但我已經放棄努力,因爲我知道hardily如何代碼的PHP想象。

所需的輸出
用戶名ip地址

+1

請提供它應該是什麼樣子,正常和縮寫的例子。 – wallyk 2011-05-07 22:38:11

+0

確定我已經這樣做了 – dukevin 2011-05-07 22:42:32

回答

3
$q = $_REQUEST["ipladder"]; 
$f = fopen("ladderlog.txt", "r"); 
while (($line = fgets($f)) !== FALSE) 
{ 
    if (strstr($line, $q)) 
    { 
     $data = explode(" ", $line); // split using the space into an array 
            // array index 0 = PLAYER_ENTERED 
     print "IP:" . $data[1];  // array index 1 = IP 
     print "Name: " . $data[2]; // array index 2 = name 
    } 
} 
+0

謝謝,這個作品很棒!後續問題,如果你不介意,但我將如何檢查重複,就像有兩個相同的名稱和IP實例 – dukevin 2011-05-08 00:00:44

+1

幾種不同的方式去做。這是另一個全新的問題,但這裏是一個開始的地方.http://www.php.net/manual/en/function.file.php,http://php.net/manual/en/function.array- diff.php – robx 2011-05-08 03:53:21

1

試試這個...

<? 
    $str = "PLAYER_ENTERED name 108.21.131.56 username"; 
    if (preg_match("~^(.+)\s+(.+)\s+([\d\.]+)\s+(.+)$~msi", $str, $vv)) 
     echo $vv[3] . " and " .$vv[4] ; 
    else "N/A"; 
?> 

恕我直言,Perl的正則表達式 - 是解析字符串以正確的方式...

+0

「名」和「用戶名」是不是靜態的,它們在 – dukevin 2011-05-07 22:44:17

+0

凱文閱讀,這就是例子......它不是在_any_名或IP :) 更改字符串相關的...查看差異,也與空間數量無關。 (+)。+ +。。+ +。+)$〜msi「 – 2011-05-07 22:45:11

1

您可以使用substr()檢查$line的前14個字符是否等於PLAYER_ENTERED,然後使用list()explode()從行中提取數據。

$q = $_REQUEST["ipladder"]; 
$f = fopen("ladderlog.txt", "r"); 
while(($line = fgets($f)) !== FALSE) 
{ 
    if(substr($line, 0, 14) == 'PLAYER_ENTERED'){ 
     list($event, $name, $ip, $username) = explode($string); // here they come! 

     echo 'Name: ' . $name . ', ip: ' . $ip . ', username: ' . $username; 
    } 
} 
+0

沒有東西被打印:( – dukevin 2011-05-07 22:48:42

+0

我的錯誤,請再試一次: ) – 2011-05-07 22:50:53

0

一種方法是:

$tokens = explode(' ', $line); 
if (count($tokens) == 4 && $tokens[2] == $q) { 
    printf('IP: %s Username: %s', $tokens[2], $tokens[3]); 
} 
0
<?php 
$str = 'PLAYER_ENTERED name 108.21.131.56 username'; 

$data = explode(" ", $str) 

print_r($data) 

?>