PHP: расщепление строки и печать - PullRequest
1 голос
/ 08 мая 2011

У меня есть вывод сервера, который выглядит так
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

Ответы [ 5 ]

3 голосов
/ 08 мая 2011
$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 голос
/ 08 мая 2011

Вы можете использовать substr(), чтобы проверить, равны ли первые 14 символов $line 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;
    }
}
1 голос
/ 08 мая 2011

попробуйте это ...

  <?
  $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 regexp - это правильный способ разбора строк ...

0 голосов
/ 08 мая 2011
<?php
$str = 'PLAYER_ENTERED name 108.21.131.56 username';

$data = explode(" ", $str )

print_r($data)

?>
0 голосов
/ 08 мая 2011

Один путь будет:

$tokens = explode(' ', $line);
if (count($tokens) == 4 && $tokens[2] == $q) {
    printf('IP: %s Username: %s', $tokens[2], $tokens[3]);
}
...