У меня возникла проблема, когда я получаю довольно нерегулярный вывод строки из сценария RCON на сервере. Когда я посылаю команду для возвращения игроков на сервере, я получаю строку, которая выглядит следующим образом:Попытка сделать строку вывести массив в php
rcon->get_players();
Players on server: [#] [IP Address]:[Port] [Ping] [GUID] [Name] -------------------------------------------------- 0 1.1.1.1:2 46 654321(OK) Player Name1 1 2.2.2.2:2 47 123456(OK) Player Name2 (2 players in total)
Вот что он выглядит как отформатирован, если это помогает:
Players on server:
[#] [IP Address]:[Port] [Ping] [GUID] [Name]
--------------------------------------------------
0 1.1.1.1:2 46 654321(OK) Player Name1
1 2.2.2.2:2 47 123456(OK) Player Name2
(2 players in total)
Так первая 0 их ключевой идентификатор на сервере (0-но много игроков), второй - их IP и PORT, 47 - пинг, playerguid - их баттли-гид, затем их имя в игре, а затем общее количество игроков возвращается.
Однако он возвращается как одна большая строка. Я пытаюсь понять, как передать это в массив. Поэтому я получаю что-то вроде этого:
array("id"=>"0", "Connection"=>"1.1.1.1:2", "ping"=>"46", "guid"=>"654321", "name"=>"Player Name1");
Любой способ добиться этого, учитывая, насколько нерегулярным является выход? Наличие заголовков в строке отбрасывает меня.
Я последовал Не паникуйте то совету, и это близко: ОБНОВЛЕНО
echo "Player List:<br />";
$raw_players = $rcon->get_players();
$lines = explode("\n", $raw_players);
$end = count($lines)-1;
$keys = array('id','connection','ping','guid','name');
$regex = '/(\d+)\s+([\d\.\:]+)\s+(\d+)\s+(\d+)\(OK\)\s+(.+)/';
for ($i=3; $i < $end; $i++) {
echo($lines[$i]);
preg_match($regex, $lines[$i], $matches);
unset($matches[0]);
echo(var_dump($matches));
$players[] = array_combine($keys, $matches);
}
И я получаю:
Player List:
0 98.193.210.251:2304 47 e0b29e3c7122bda33b5391c22594c776(OK) Colin Fox
array (size=0)
empty
Не могли бы вы предоставить более длинный отрывок из реальных данных? Просто замените ip-адреса и имена пользователей. Эта строка не очень полезна. – migg
, что одна строка - это два игрока, которые подключены, если бы я добавил больше, он бы выглядел так: «1 1.1.1.1: 46 654321 (OK)« Имя игрока3 »и продолжайте повторять так. – Flynn
Я отформатировал таблицу, если это помогает, она выводится как строка runnon, но я добавил разрывы строк, чтобы было легче увидеть, что он пишет – Flynn