Formatter des données en recupérant des info rcon

Par Cobryn, il y a 10 ans


Bonjour,

Voila je rencontre un petit problème avec mon code,
Je récupére des informations d'un serveur de jeu via une commande RCon, qui me retourne :

Players on server: [#] [IP Address]:[Port] [Ping] [GUID] [Name] -------------------------------------------------- 0 xx:2304 0 b2f68915803ee795a7d6711417c26d014(OK) Joe Dalton 1 xx:2304 47 bcadb61d88e22cd56ec53b848fdafd3fe(OK) Marcus Garvey 2 xx:2304 31 fb01878d546ed4d4a85bfebd57dd793f7(OK) Matravo Yuri 3 xx:2304 93 e4621b6d996a323023969da45815a505a(OK) Bill Zelouf 4 xx:2304 32 0eed35681d5be9690d3cdab72e7e8fda8(OK) Mike Connor 5 xx:2304 47 b88492f891351d24ad3d8ca374390c0fb(OK) Vassili Zakharov 6 xx:2304 31 554dd681a3d455b3730da516fa3976a6a(OK) Tonny Zelouf 7 xx:2304 15 118a3fa279d3c2541a6021a7806a691b0(OK) Paco Kosova 8 xx:2304 31 9b18d9184be712f8634cf157de18a4003(OK) Charlie Requiem (9 players in total)

J'aimerais formatter les données dans un tableau <table> comment faire ?

28 réponses

AlexJM, il y a 10 ans

Bonjour,
Pourquoi pas avec une petite expression régulière ?

Cobryn, il y a 10 ans

Bonjour,

Je n'ai pas vraiment compris votre question

AlexJM, il y a 10 ans

Vous pourriez essayer de le faire avec une expression régulière, je pense

Cobryn, il y a 10 ans

Je ne comprend toujours pas, je n'ai jamais faire ce genre de formattage, il faudrais m'expliquer ou me montrer comment faire directement

AlexJM, il y a 10 ans

Vos données, c'est une chaine de caractère ?

Cobryn, il y a 10 ans

Aucune idée, ^^
Quand j'echo ça me donne le code ci dessus

AlexJM, il y a 10 ans

Pouvez-vous montrer le code actuel svp?

Cobryn, il y a 10 ans
<?php require_once('inc/rcon.php'); $rcon = new \Nizarii\ArmaRConClass\ARC("ip", 2302, "pass"); echo '<pre>'; var_dump($rcon->get_players()); echo '</pre>'; ?>
AlexJM, il y a 10 ans

Ok, donc voyez ceci :

preg_match_all('(([0-9]+) +([x]+):([0-9]+) +([0-9]+) +([a-z0-9]+)\(OK\) +([a-zA-Z ]+))', $rcon->get_players(), $matches);

Les données se trouvent dans $matches
Si vous voulez quelques explications, je peux vous en donner

Cobryn, il y a 10 ans

J'aimerais comprendre oui s'il vous plait :)
M'expliquez comment le mettre dans un tableau maintenant :p

AlexJM, il y a 10 ans

Donc preg_match_all recherche avec un pattern (l'expression régulière), dans $rcon->get_players()et mets tout ce qu'il trouve dans $matches.
Si vous parlez anglais, je vous conseille de visiter http://regexr.com pour plus d'informations sur les expressions régulière, sinon vous pouvez vous renseignez il y a en francais sur d'autres sites
Pour le mettre en tableau, dans $matches vous avez plusieurs tableaux (7 pour être exact).
Ensuite, cela fonctionne de cette manière:
$matches[0][i] représente toute la ième information
$matches[1][i] représente le ième #
$matches[2][i] représente la ième ip
$matches[3][i] représente le ième port
$matches[4][i] représente le ième ping
$matches[5][i] représente le ième guid
$matches[6][i] représente le ième name
(j'espère que vous comprendrez, je ne vois pas trop comment expliquer cela)

En soite pour votre tableaux vous pourriez faire un truc du style :

$tableau = []; foreach($matches[0] as $k => $v){ $tableau[ $matches[1][$k]] = ['ip' => $matches[2][$k], 'port' => $matches[3][$k]];//et ainsi de suite pour chaque renseignement }
Cobryn, il y a 10 ans

etant débutant je ne comprend pas trop tout ça, ...
le mieu serait que je trouve quelqu'u, qui puisse me faire le code de facon a ce que sa se mette en place dans un <table>v

Benjamin Derepas, il y a 10 ans

Si tu es débutant le mieux en l'occurence, c'est que tu comprenne le raisonnement de AlexJM. Certes les regex sont une chose assez complex pour débuter, mais c'est comme ça qu'on apprend . Pas en recopiant bêtement un code pré maché

Cobryn, il y a 10 ans

Mais j'apprend en examinant un code pas autrement j'y peut rien

AlexJM, il y a 10 ans

Que n'arrives-tu pas à faire ?

Je suis d'accord avec Benjamin Derepas, si on te donne tout ca ne sert à rien, je t'ai donné la regex étant donné que c'est complexe, mais maintenant à toi d'essayer de comprendre. Si tu as besoin de poser des questions, nous sommes là pour y répondre

Cobryn, il y a 10 ans

C'est parfait !

Je récupére bien toutes les informations sous formes d'array, il ne me reste plus qu'a le ranger dans un tableau html, une idée de comment faire ? (j'ai du mal avec les array et table html ^^)

Cobryn, il y a 10 ans

Le mieu serait le code tout fait, je sais j'en demande bcp mais je comprend que quand je vois que ça fonctionne j'ai appris les bases en regardant des codes tout fait je suis comme ça, please :(

Benjamin Derepas, il y a 10 ans

Pour ma part, je ne vais pas te le donner. Je trouve ça dommage se manque de recherche. Le dev web c'est beaucoup de recherche, d'expérimentation etc. Si tu baisses les bras au premier obstacle, tu ne pas apprendre

AlexJM, il y a 10 ans

Il te reste 3 lignes à faire, qui ne sont certes pas bien difficiles avec mes explications

Cobryn, il y a 10 ans

Je vais essayer :x merci

AlexJM, il y a 10 ans

De rien, si tu as besoin d'aide ;)

Cobryn, il y a 10 ans

Bonsoir,

Après avoir regarder les tutoriaux sur internet et vidéo de Grafikart je me retrouve bloqué dans la même situation, un echo ou var_dump sur $matches affiche du blanc et pareil pour un echo impossible de comprendre ... Help !

AlexJM, il y a 10 ans

Les ips c'est vraiment XX ?

Cobryn, il y a 10 ans

Bonjour,

Non les ip sont sous formes d'adresse IP

Lartak, il y a 10 ans

Non les ip sont sous formes d'adresse IP

Si tu n'as pas légèrement modifié la regex que t'a montré AlexJM, c'est normal que tu aies une erreur alors.
Il te faut par exemple remplacer ([x]+) par ([0-9]{2,3}.[0-9]{2,3}.[0-9]{1,3}.[0-9]{3}), ce qui donne au complet :

'(([0-9]+) +([0-9]{2,3}.[0-9]{2,3}.[0-9]{1,3}.[0-9]{3}):([0-9]+) +([0-9]+) +([a-z0-9]+)\(OK\) +([a-zA-Z ]+))'
AlexJM, il y a 10 ans

([0-9]{2,3}.[0-9]{2,3}.[0-9]{1,3}.[0-9]{3}) => ([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})

Sinon tu n'auras pas toutes les ips ;)

Cobryn, il y a 10 ans

Bonjour,

Petit nouveau problème, le code Regex est parfait mais il manque la prise en charge des accents, par exemples certains joueurs on des accents ,comme un "éric paté", et il n'est pas afficher dans la liste.

Quelqu'un pourrait update le regex ?

Merci