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
Réponse acceptée

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

AlexJM
Réponse acceptée

([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 ;)

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

Cobryn
Auteur

Bonjour,

Je n'ai pas vraiment compris votre question

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

Cobryn
Auteur

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

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

Cobryn
Auteur

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

Pouvez-vous montrer le code actuel svp?

Cobryn
Auteur
<?php
require_once('inc/rcon.php');

$rcon = new \Nizarii\ArmaRConClass\ARC("ip", 2302, "pass");    

echo '<pre>';
var_dump($rcon->get_players());
echo '</pre>';

?>
Cobryn
Auteur

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

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
Auteur

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

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
Auteur

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

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
Auteur

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 :(

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

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

Cobryn
Auteur

Je vais essayer :x merci

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

Bonsoir, il y a différents tutoriels sur le site qui te permettront de mieux appréhender les expressions régulières et la manipulation des tableaux, quelques exemples :

Cobryn
Auteur

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 !

Les ips c'est vraiment XX ?

Cobryn
Auteur

Bonjour,

Non les ip sont sous formes d'adresse IP

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 ]+))'
Cobryn
Auteur

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
Auteur

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