fork(2) download
  1. <?php
  2.  
  3. // Dados de entrada:
  4. $linha = 'NICK:KEOME PTS:50 ASTS:6 DEFREB:2 OFFREB:7 STLS:14 BLKS:4 TOS:5 NICK:ARTHUR PTS:10 ASTS:3 DEFREB:5 OFFREB:4 STLS:4 BLKS:2 TOS:6';
  5.  
  6. // Verifica se é possível obter os dados com expressão regular:
  7. if (preg_match_all("/([a-zA-Z]+)\:([a-zA-Z0-9]+)\s?/", $linha, $matches)) {
  8.  
  9. // Lista de jogadores:
  10. $players = [];
  11.  
  12. // Dados do jogador:
  13. $player = [];
  14.  
  15. // Percorre todos os valores da entrada:
  16. foreach(array_map(null, $matches[1], $matches[2]) as $pair) {
  17.  
  18. // O valor é um nick?
  19. if (strtoupper($pair[0]) == "NICK") {
  20.  
  21. // Se houver dados de outro jogador, adicione a lista:
  22. if ($player) {
  23. $players[] = $player;
  24. }
  25.  
  26. // Inicia os dados do jogador para o nick atual:
  27. $player = ["name" => $pair[1], "stats" => []];
  28.  
  29. } else {
  30.  
  31. // Não é um nick, então só pode ser um status do jogador atual:
  32. $player["stats"][strtolower($pair[0])] = $pair[1];
  33. }
  34. }
  35.  
  36. // Adiciona à lista os dados do último jogador:
  37. if ($player) {
  38. $players[] = $player;
  39. }
  40.  
  41. // Exibe a lista de jogadores completa:
  42. print_r($players);
  43. }
Success #stdin #stdout 0.01s 82944KB
stdin
Standard input is empty
stdout
Array
(
    [0] => Array
        (
            [name] => KEOME
            [stats] => Array
                (
                    [pts] => 50
                    [asts] => 6
                    [defreb] => 2
                    [offreb] => 7
                    [stls] => 14
                    [blks] => 4
                    [tos] => 5
                )

        )

    [1] => Array
        (
            [name] => ARTHUR
            [stats] => Array
                (
                    [pts] => 10
                    [asts] => 3
                    [defreb] => 5
                    [offreb] => 4
                    [stls] => 4
                    [blks] => 2
                    [tos] => 6
                )

        )

)