PHP: Разделение строки и печать

#php #string #explode

#php #строка #взорваться

Вопрос:

У меня есть вывод сервера, который выглядит следующим образом
PLAYER_ENTERED name ipaddress username

Если строка содержит PLAYER_ENTERED, внутри строки всегда будет 3 пробела, разделяющих ее (как это можно изменить, чтобы это тоже выполнялось?). Я хотел бы распечатать только ip-адрес и имя пользователя (последние 2 раздела). Как это можно сделать?

Это код, который печатает все целиком:

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

Я представляю это с помощью explode (), но я отказался от попыток, так как я твердо знаю, как кодировать php.

Желаемый результат
имя пользователя ip-адрес

Комментарии:

1. Пожалуйста, приведите пример того, как это должно выглядеть, как обычно, так и сокращенно.

Ответ №1:

 $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. Спасибо, это отлично работает! Следующий вопрос, если вы не возражаете, но как мне проверить наличие дубликатов, например, иметь 2 экземпляра с одинаковым именем и IP

2. Для этого есть несколько разных способов. Это еще один совершенно новый вопрос, но здесь есть с чего начать. php.net/manual/en/function.file.php , php.net/manual/en/function . array-diff.php

Ответ №2:

Вы можете использовать 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. Моя ошибка, пожалуйста, попробуйте еще раз 🙂

Ответ №3:

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

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

Комментарии:

1. Кевин, это пример … это не связано с каким -либо именем или ip 🙂 Измените строку … чтобы увидеть разницу, также не связанную с количеством пробелов. «~^(. )s (. )s ([d.] )s (. )$~msi»

Ответ №4:

Одним из способов было бы:

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

Ответ №5:

 <?php
$str = 'PLAYER_ENTERED name 108.21.131.56 username';

$data = explode(" ", $str )

print_r($data)

?>