Fini: string zerlegen

Moin,

sitze zurzeit an einen Problem und zwar möchte ich einen String zerlegen.

Bsp:

$i = "Ahg123hGnd325"

Jetzt möchte ich für jeden Einzelnen Buchstaben etwas machen (was ist egal), wichtig ist aber, dass ich mit dem wert von dem Buchstaben arbeiten kann. Zusätzlich sollen die Zahlen aber ganz bleiben.

Bsp:

$i = "Ahg123hGnd325"

for each buchstabe in $i
    switch ($i)
      case(a)
        echo "Hallo Welt"
        break
      case(b)
        ...

for each Number
    $j = $j + Zahl    //in dem fall einmal halt +123 und einmal +325

ich hoffe, dass das irgendwie lösbar ist.

danke schonmal.

  1. hi,

    for each buchstabe in $i

    vermutlich möchtest Du den String ersteinmal in eine Liste umsetzen.

    Hotti

    1. Hi!

      for each buchstabe in $i
      vermutlich möchtest Du den String ersteinmal in eine Liste umsetzen.

      In PHP gibt es keine Listen, nur Arrays. Auf einzelne Zeichen eines Strings lässt sich aber wie auf ein Array zugreifen. Bleibt das Problem der Zahlen, die ja aus mehreren Zeichen bestehen. In dem Fall muss man sammeln. Etwas so:

      Iterieren über die Zeichen des Strings
        Wenn Ziffer und kein Zahlenmodus, dann
          Zahlenmodus beginnen
          Zahl anlegen mit der aktuellen Ziffer
          nächster Schleifendurchlauf
        Wenn Ziffer und Zahlenmodus, dann
          aktuelle Ziffer an Zahl anhängen
          nächster Schleifendurchlauf
        Wenn Buchstabe und Zahlenmodus, dann
          Zahlenmodus beenden
          mit Zahl was machen
        Buchstabe auswerten

      Wenn nach Ablauf der Schleife der Zahlenmodus aktiv ist, dann endete die Zeichenfolge mit einer Ziffer. In dem Fall muss die gesammelte Zahl noch ausgewertet werden.

      Lo!

  2. Hi,

    eine erste Idee wäre folgendes:

    $i="dein String";  
    for($k=0;$k<strlen($i);$k++) {  
      machWasMit( $i{$k} );  
    }
    

    bye trunx

    --
    Die Standard-Antwort: "Bitte benutze die Forum-Suche!" macht die Forum-Suche kaputt, weil die Suche dann nämlich genau vor allem diese dämliche Standard-Antwort, also Müll liefert. Sinnvoller ist stattdessen folgende Standard-Antwort: "Dieses Thema wurde schon vielfach im Forum besprochen, siehe z.B. <a>hier</a> oder <a>hier</a> oder benutze die Forum-Suche z.B. mit den Stichworten 'Stichwort1 Stichwort2'." Danke.
  3. Hello,

    sitze zurzeit an einen Problem und zwar möchte ich einen String zerlegen.

    Bsp:

    $i = "Ahg123hGnd325"

    Jetzt möchte ich für jeden Einzelnen Buchstaben etwas machen (was ist egal), wichtig ist aber, dass ich mit dem wert von dem Buchstaben arbeiten kann. Zusätzlich sollen die Zahlen aber ganz bleiben.

    Bsp:

    $i = "Ahg123hGnd325"

    for each buchstabe in $i
        switch ($i)
          case(a)
            echo "Hallo Welt"
            break
          case(b)
            ...

    for each Number
        $j = $j + Zahl    //in dem fall einmal halt +123 und einmal +325

    Ersteinmal solltest Du festlegen, ob es sich um einen "String" handelt, oder um eine Byte-Sammlung, also ein Byte-Array. Da PHP und speziell das Webumfeld inzwischen fast immer auch mit UTF-8 zu tun hat, könnten die Zeichenrepräsentationen des Strings nämlich auch mehrere Bytes für ihre Codierung benötigen.

    Daher sollte Schritt 1 also ein, festzustellen, ob eine Multibyte-Codierung oder eine Singlebyte-Codierung Verwendung findet.

    Mit den Stringfunktionen
        http://de.php.net/manual/en/ref.strings.php
        http://de.php.net/manual/en/ref.mbstring.php
    speziell den Substring-Funktionen daraus, lassen sich dann einzelne Zeichen abtrennen. Diese Zeichen kannst Du dann daraufhin untersuchen, ob sie numerische oder literale Repräsentanzen sind.

    Besonders kompliziert wird das dann durch Sonderzeichen, wie + und -, oder auch Klammern, die einzeln als Literale und in Verbindung mit direkt nachfolgenden Nummernzeichen dann ggf. ebenfalls als numerische Zeichen gelten müssen / ihnen zugeordnet werden müssen.

    Das Ganze wird sich wohl am bequemsten mit einer Regualr Expression erledigen lassen.

    http://de.php.net/manual/en/ref.pcre.php

    Du wirst also nicht drum herumkommen, eine genauere Festlegung der Rahmenbedinungen vorzunehmen, bevor die Lösung der Aufgabe sinnvoll möglich ist.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  4. Hi!

    ich hoffe, dass das irgendwie lösbar ist.

    Hast doch quasi die Loesung. Du musst nur noch eine Variable fuer Zahlen einfuehren und immer wenn Dein Buchstabe eigentlich eine Zahl ist, daraus einen Zahlenstring basteln, der sobald der Buchstabe wieder eine Buchstabe ist, in eine Zahl umgewandelt wird.

    --
    "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
          - T. Pratchett