我的服务器输出看起来像这样
PLAYER_ENTERED name ipaddress username
如果字符串包含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";
}
我想这会使用explode(),但我已经放弃了尝试,因为我很难知道如何编写php。
期望输出
用户名ipaddress
答案 0 :(得分: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
}
}
答案 1 :(得分: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";
?>
IMHO Perl regexp - 解析字符串的正确方法......
答案 2 :(得分:1)
您可以使用substr()
检查$line
的前14个字符是否等于PLAYER_ENTERED,然后使用list()
和explode()
从该行中提取数据。< / p>
$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;
}
}
答案 3 :(得分:0)
一种方法是:
$tokens = explode(' ', $line);
if (count($tokens) == 4 && $tokens[2] == $q) {
printf('IP: %s Username: %s', $tokens[2], $tokens[3]);
}
答案 4 :(得分:0)
<?php
$str = 'PLAYER_ENTERED name 108.21.131.56 username';
$data = explode(" ", $str )
print_r($data)
?>