[PHP] aus einer Zeile Informationen auslesen



  • Es ist im Grunde simpel. Aus einer Variable sollen spezifiische Parts ausgelsen werden.

    zB $var1 = "blubberblubber123hahaha678fumfum";

    Man weis das blubberblubber, hahaha und fumfum dastehen, kennt aber die Zeichen dazwischen nicht, will sie also kennen.

    123 soll dann zB in die variable $zahl1 geladen werden und 678 in die Variable $zahl2.

    Dabke schoneinmal im Voraus.



  • <?php
      $a=array();
      $count=0;
      $str="bfubdv76845dfsvofdbhv9437bfdbvfdb7854fbscbduvd854vbudbu";
      for ($i=0;$i<strlen($str);++$i)
      {
        if ($str[$i]>="0" && $str[$i]<="9")
        {
          $a[$count].=$str[$i];
          $b=1;
        }
        else if ($b==1)
        {
          ++$count;
          $b=0;
        }
      }
    ?>
    

    Jetzt stehen die Zahlen im Array "$a".



  • du müsstest das noch etwas genauer erklären - evtl. über einen regulären Ausdruck oder substr 🙂



  • Ich würde die bekannten Zeichenketten im String durch ein definiertes Zeichen mittels str_replace() erstetzen und den erhaltenen Reststring dann mit explode in ein Array schreiben. In diesem Array sollten dann deine Zahlen stehen.

    So in etwa:

    $var1 = "blubberblubber123hahaha678fumfum";
    $strings=array("blubberblubber","hahaha","fumfum"); 
    for ($i=0;$i<3;$i++)
    {
         $var1=str_replace($strings[$i],"|",$var1);
    }
    $zahlen=explode("|",$var1);
    


  • Also ich glaube nicht, dass er die Zeichen dazwischen wirklich kennt, ich glaub er hat es nur als Beispiel so dahingeschrieben... Hier nochmal mein Code mit Erklärung *gg*:

    <?php
      $a=array(); // Initialisiert ein Array mit unbestimmter Anzahl von Elementen
      $count=0;
      $str="bfubdv76845dfsvofdbhv9437bfdbvfdb7854fbscbduvd854vbudbu"; //Das ist unser Ausgangsstring...
      for ($i=0;$i<strlen($str);++$i) // Geht den ganzen String durch
      {
        if ($str[$i]>="0" && $str[$i]<="9") // Guckt nach ob das aktuelle Zeichen eine Zahl ist
        {
          $a[$count].=$str[$i];  // Wenn ja, fügt er es dem aktuellen Element hinzu
          $b=1;  // und setzt b auf 1...
        }
        else if ($b==1) // b wurde auf 1 gesetzt, damit wir sehen können, wann eine "ganze" zahl zuende ist
        {
          ++$count;  // und wenn sie zuende, springen wir ein Element vom Array weiter
          $b=0; // Und dann setzen wir wieder b auf null, sonst werden evtl. mehrere elemente übersprungen.
        }
      }
    ?>
    


  • Würden sich für solche Aufgaben nicht eher pregs eignen? Also etwas wie

    preg_match_all('/([0-9]+)/', $str, $ergebnis, PREG_SET_ORDER);
    

    Hab' das jetzt nur schnell aus dem Kopf zusammengebastelt, es gibt keine Gartantie. Eine for-Schleife erscheint mir da doch schon ein wenig übertrieben.



  • Ich finde, solange ic4rus nicht mal sagt, was genau er überhaupt will brauchen wir uns doch hier nicht darüber den Kopf zerbrechen 😉



  • Nun eigentlich war das nicht so gemeint, ich hatte den Befehl schoneinmal. Irgendetwas sehr simples.

    Also als Erstes:

    Es müssen keine Zahlen sein es können wirgendwelche Zeichen sein, die man im Voraus kennt.

    Also zB

    Der Input sieht so aus:
    erweblubberagasdsalulu

    Das Fette kennt man. Nun will man erwe in die Variable $output1 laden und agasdsa in die Variable $output2 laden.

    Hat dafür einer einen Codeschnipsel?

    Danke schoneinmal im voraus



  • ic4rus schrieb:

    Hat dafür einer einen Codeschnipsel?

    Das wäre doch etwas zu einfach oder? Aber du kannst alle bekannten Delimiter durch einen einzelnen (z.B. ";") konstanten ersetzen und dann explode() verwenden...



  • hmm geht das nicht irgendwie anders?

    ich hatte mal etwas ganz einfaches...



  • über einen preg_match - ansonsten fällt mir nichts ein 😉


Anmelden zum Antworten