2011-05-07 161 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) 

?>