PHP String in Array

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP String in Array

    Hallo,

    ich habe ein kleines Problem. Ich habe eine API eines Spieleservers. Dieser reagiert auf das RCon Protokoll. Nun habe ich eine Ausgabe die in etwa so lautet:

    Code:
    UserID filter list: 4 entries
    1 STEAM_0:1:64439552 : 120.000 min
    2 STEAM_0:1:34003545 : 10.000 min
    3 STEAM_0:1:42585000 : 100.000 min
    4 STEAM_0:1:51745122 : 100.000 min
    Nun möchte ich diese in einem Array bekommen. So in etwa:
    PHP-Code:
    Array 

        [
    0] => array 
          ( 
            [
    userid] => 1
            [
    steamid] => STEAM_0:1:64439552
            [
    banntime] => '120.000 min'
          ), 
        [
    1] => array 
          ( 
            [
    userid] => 2
            [
    steamid] => STEAM_0:1:34003545
            [
    banntime] => '10.000 min'
          ), 
        [
    2] => array 
          ( 
            [
    userid] => 3
            [
    steamid] => STEAM_0:1:42585000
            [
    banntime] => '100.000 min'
          ), 
        [
    3] => array 
          ( 
            [
    userid] => 4
            [
    steamid] => STEAM_0:1:51745122
            [
    banntime] => '100.000 min'
          ), 

    Ich möchte anmerken, das ich bisher noch keine Erfahrung mit RegEx habe. Gibt es da eine andere Lösung? Ich möchte ausserdem vermerken, das ich nicht verlange das mir jemand ein fertigen COdeschnipsel schreibt, wäre aber schön einige Lösungansätze zu haben. Denn von dort geht mein Lernen anhand von ausprobieren weiter.

    Vielen dank.

  • #2
    Hierfür müsste eigentlich explode() vollkommen ausreichen. Einmal an den Zeilenumbrüchen exploden und einmal an den Leerzeichen.

    Kommentar


    • #3
      Ich habs so gemacht:

      PHP-Code:
      $TEXT explode("\n"$TEXT);
          for (
      $i 1$i count($TEXT); $i++) {
            
      $ReturnTestText[] = array(
              
      'userid'  =>
                
      substr($RConListId[$i], 0,
                
      strpos($RConListId[$i], 'STEAM') -1),
              
      'steamid' =>
                
      substr($RConListId[$i],
                
      strpos($RConListId[$i], 'STEAM'), +18),
              
      'bantime' =>
                
      substr($RConListId[$i],
                
      strpos($RConListId[$i], ' : ') +3),
            );
          } 
      Problem nur, sobal die STEAM_ID viel länger als normal ist, funktioniert es schon nicht mehr. Was besseres fällt mir irgendwie nicht ein?!

      Kommentar


      • #4
        explode() statt substr() und strpos() verwenden.

        Kommentar


        • #5
          Mit substr wirst du da nicht weiter kommen. Auf die Schnelle ein Schnipsel dazu.
          PHP-Code:
          $str '1 STEAM_0:1:64439552 : 120.000 min';
          preg_match ('/([0-9]{1,})\s{1}(STEAM_0\:1\:[0-9]{1,})\s{1}\:\s{1}([0-9]{1,3}\.[0-9]{3}\s{1}min)/Usi'$str$hit);
          print_r($hit); 
          Peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Warum so umständlich? Man muss nicht immer mit Kanonen auf Spatzen schießen.

            PHP-Code:
            $line '1 STEAM_0:1:64439552 : 120.000 min';
            $parts explode(' '$line);

            $data = array(
                
            'userid' => $parts[0],
                
            'steamid' => $parts[1],
                
            'banntime' => $parts[3] . ' ' $parts[4]
            ); 
            Zuletzt geändert von h3ll; 01.05.2013, 14:50.

            Kommentar


            • #7
              Zitat von h3ll Beitrag anzeigen
              Warum so umständlich? Man muss nicht immer mit Kanonen auf Spatzen schießen.
              Auch wahr. Hab nur wie magisch angezogen auf das substr gestarrt. Außerdem sollte man mindestens einmal pro Woche einen regexp basteln, sonst verlernt man das ganz schnell.

              Peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                @H3ll

                Wie bekomme ich das jetzt in einer Schleife? Ich habe ja mehr als einen Eintrag. Irgendwie steht ich aufn Schlauch.

                Kommentar


                • #9
                  Zitat von mmueller-87 Beitrag anzeigen
                  @H3ll

                  Wie bekomme ich das jetzt in einer Schleife? Ich habe ja mehr als einen Eintrag. Irgendwie steht ich aufn Schlauch.
                  PHP-Code:
                  $data = array();

                  foreach (
                  explode("\n"$input) as $line) {
                      if (empty(
                  $line)) {
                          continue;
                      }
                      
                  $parts explode(' '$line);

                      
                  $data[] = array(
                          
                  'userid' => $parts[0],
                          
                  'steamid' => $parts[1],
                          
                  'banntime' => $parts[3] . ' ' $parts[4]
                      );

                  Kommentar

                  Lädt...
                  X