Reto Strub: String zerlegen

Hallo zusammen

Ich habe folgendes Problem:

Ich habe immer den gleichen String und möchte den in Variabeln verlegen:

String: "InnovaTec: Admin InnovaTec Strub" (Der stammt aus eriner .htgroups Datei)

Ich habe folgendes versucht:

ereg ("(.*)(:)(.*)( )(.*)( )(.*)($)", $zeile, $solve_var);

Das funktioniert jedoch nicht!

Danke im Voraus und einen Guten Rutsch

Reto

  1. Mit explode() zerlegt man eine Zeichenkette (string) anhand eines vordefinierten
    Trennzeichens (separator).

    $String= "InnovaTec: Admin InnovaTec Strub";

    $Feld = explode(" ",$string);

    führt zu:
    $Feld[0] = InnovaTec:
    $Feld[1] = Admin
    $Feld[2] = InnovaTec
    $Feld[3] = Strub
    weiter:

    $Gruppenname=str_replace(":","",$array[0])
    #erstetzt den ":" durch "Nichts"

    $user="";
    for ($i=1, $i<count($array), $i++) {
      $user=$user.$array[$i].";";
    }

    alle: Admin;InnovaTec;Strub

    oder:

    $user=array();
    for ($i=1; $i<count($array); $i++) {
      $user[$i-1]=$array[$i];
    }

    führt zu:
    $user[0] = Admin;
    $Feld[1] = InnovaTec
    $Feld[2] = Strub

    Welches Schweinchen hätten sie gern?

    1. ... Da habe ich glatt $array durch $Feld ersetzen wollen um für weniger Konfusion zu sorgen und mich dann selbst durcheinander gebracht---

      $String= "InnovaTec: Admin InnovaTec Strub";

      $Feld = explode(" ",$String);

      führt zu:
       $Feld[0] = InnovaTec:
       $Feld[1] = Admin
       $Feld[2] = InnovaTec
       $Feld[3] = Strub
       weiter:

      $Gruppenname=str_replace(":","",$Feld[0])
       #erstetzt den ":" durch "Nichts"

      $User="";
       for ($i=1, $i<count($Feld), $i++) {
         $User=$User.$Feld[$i].";";
       }
       # $user= "Admin;InnovaTec;Strub;"
       # das geht aber besser sie implode();
       oder:

      $user=array();
       for ($i=1; $i<count($Feld); $i++) {
         $user[$i-1]=$Feld[$i];
      }

      #führt zu:
      #$user[0] = Admin;
      #$user[1] = InnovaTec
      #$user[2] = Strub

      So, jetzt das mit dem Implode nochmal:

      $Benutzer=implode(";",$user);

      #führt zu:
      #$Benutzer= "Admin;InnovaTec;Strub"

      fastix

      1. Danke fastix

        Du hast meine Erwartungen voll und ganz getroffen.

        Ich brauche:

        • Den "explode"-Befehl
        • Den der die Array's um ein's zurücksetzt.

        Danke

        Reto

        PS: Ich hoffe Ihr seit gut "gerutsch" (Ins neue Jahr natürlich)

        1. Nun habe ich ein weiteres Problem:

          Da ich mehrere Dieser Zeilen habe, möchte ich die alle în eine Variable einpacken.

          Ich hab folgendes probiert:

          $Feld[1] = "Admin";
            $Feld[2] = "Supervisor";
            $Feld[3] = "Reto";
            $Feld[4] = "Strub";

          for ($x=1; $x<count($Feld); $x++)
            {
              $user[$i][$x]=$Feld[$x];
              echo("$user[$i][$x] = $user[$i][$x]<BR>\n");
            }

          Als Antwort auf echo, bekomme ich: "Array[1]" Warum?

          MfG Reto

          1. $Feld[1] = "Admin";
              $Feld[2] = "Supervisor";
              $Feld[3] = "Reto";
              $Feld[4] = "Strub";

            for ($x=1; $x<count($Feld); $x++)
              {
                $user[$i][$x]=$Feld[$x];
                echo("$user[$i][$x] = $user[$i][$x]<BR>\n");
              }

            Als Antwort auf echo, bekomme ich: "Array[1]" Warum?

            Versuchs mal mit:

            echo("$user($i)($x) = ".$user[0][$x]."<BR>\n");

            Dann klappt das auch :) und mit:

            for ($x=1; $x<count($Feld)+1; $x++)

            werden es vier Werte :)

            fastix

  2. Hallo Reto

    Ich habe immer den gleichen String und möchte den in Variabeln verlegen:
    String: "InnovaTec: Admin InnovaTec Strub" (Der stammt aus eriner .htgroups Datei)
    ereg ("(.*)(:)(.*)( )(.*)( )(.*)($)", $zeile, $solve_var);

    Also Du willst die Werte InnovaTec (ohne Doppelpunkt), Admin, InnovaTec Strub?
    Außerdem gilt, daß hinter dem ersten Wort ein Doppelpunkt steht?
    Wenn ich das richtig verstanden habe, dann mache doch folgendes:

    Trenne den String per explode() http://www.php.net/manual/de/function.explode.php und entferne vom ersten Eintrag das letzte Zeichen, z.B. mit str_replace() http://www.php.net/manual/de/function.str-replace.php

    Gruss und einen guten Rutsch,

    Vinzenz

  3. Hallo Reto,

    String: "InnovaTec: Admin InnovaTec Strub" (Der stammt aus eriner .htgroups Datei)
    ereg ("(.*)(:)(.*)( )(.*)( )(.*)($)", $zeile, $solve_var);

    Der Ansatz ist nicht ganz korrekt. Der .*-Ausdruck ist "gierig", er frisst immer das Maximum. Du musst in "ungreedy", also "nicht gierig" machen. Entweder, Du verwendest ".*?", was lahm ist, oder Du verwendest eine invertierte Zeichenklasse:

    preg_match, ('/^([^:]*):\s*([^\s]*)\s*([^\s]*)\s*(.*)$/', $zeile, $solve_var);

    $solve_var[0]: "InnovaTec: Admin InnovaTec Strub"
    $solve_var[1]: "InnovaTec"
    $solve_var[2]: "Admin"
    $solve_var[3]: "InnovaTec"
    $solve_var[4]: "Strub"

    (sofern der Ausdruck erfüllt wird)

    Grüße,

    Christian

    --
    Ich wünsche allen frohe Weihnachten!
    Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.