Tobias Otto: php split

Hallo,

ich möchte eine Zeichenfolge an einer bestimmten stelle trennen.

$str = 'Hauptstraße 32a';
$a = preg_split('/[0-9]/', $str, 2, PREG_SPLIT_DELIM_CAPTURE);
print_r($a);

als ergebnis bekomme ich leider nur
Array ( [0] => Hauptstraße [1] => 2a )

warum verschluckt er mir die zahl 3?

  1. $a = preg_split('/[0-9]/', $str, 2, PREG_SPLIT_DELIM_CAPTURE);

    Hallo, probiers doch einfach mal mit explode();
     also z.B. :  $a = explode(" ",$str);

    MFG Philipp

    1. Hallo,

      danke für deinen Tipp.

      Problem ist nur, wenn ich eine straße habe wie z.b. münchner str. 30 a
      Ich möchte nur 2 Arrays.

      1. Mhhh achso ist das.
        Da fällt mir ein, das man das vielleicht mit der länge des arrays abfragen könnte.
        $laenge = count($a);
        if($laenge > 2) {
         $b="";
         for($i=1;$i<$laenge;$i++) {
          $b = $b.$a[$i];
         }
         echo $b;
        }

        Dann dürfte bei b alles drinstehen was nach dem 1. leerzeichen kommt.

        Ist vielleicht nicht ganz so elegant. Würd ich aber als workarround vorschlagen.

  2. Hallo

    ich möchte eine Zeichenfolge an einer bestimmten stelle trennen.

    $str = 'Hauptstraße 32a';
    $a = preg_split('/[0-9]/', $str, 2, PREG_SPLIT_DELIM_CAPTURE);
    print_r($a);

    als ergebnis bekomme ich leider nur
    Array ( [0] => Hauptstraße [1] => 2a )

    warum verschluckt er mir die zahl 3?

    was hast Du denn in Deinem Suchmuster eingeklammert?
    Was machst Du mit Angaben wie

    'Straße des 17. Juni 152'

    oder der Innenstadt von Mannheim?

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      das ist richtig. Da habe ich dann ein Problem. Ich denke, dass ist dann die Außnahme.
      Aber wie bekomme ich denn es hin. das die 3 angezeigt wird.

      1. Hallo

        das ist richtig. Da habe ich dann ein Problem. Ich denke, dass ist dann die Außnahme.

        eine durchaus recht häufige Ausnahme, siehe z.B. </archiv/2007/4/t151449/#m986122>.

        Das Haus meiner Patentante trug übrigens über 10 Jahre lang die Angabe

        'Waldstraße NB'

        Aber wie bekomme ich denn es hin. das die 3 angezeigt wird.

        Das wurde Dir doch schon mal gesagt. Was hast Du eingeklammert? Ich sah nichts.

        Freundliche Grüße

        Vinzenz

    2. Mhh mal ein anderer Vorschlag.
      Ich weiß ja jetzt leider nicht genau woher die Daten kommen.
      Aber mal angenommen sie werden in ein Formular eingetragen. Dann ersparst du dir ne menge arbeit, wenn du einfach ein zweites Feld für die Hausnummer erstellst und dann einfach Straße und Hausnummer getrennt abfragst.

      1. Nein, Sie kommen aus eine Datenbank und sind dort leider alle zusammen. Jetzt muss ich aber Straße uns Hausnummer separieren.

      2. Hallo,

        Aber mal angenommen sie werden in ein Formular eingetragen. Dann ersparst du dir ne menge arbeit, wenn du einfach ein zweites Feld für die Hausnummer erstellst und dann einfach Straße und Hausnummer getrennt abfragst.

        als Anwender habe ich gelegentlich mit solch unergonomischen Formularen zu tun. Nein, ich will für die Hausnummer nicht in ein Extrafeld klicken. Macht wirklich keinen Spass - und meistens steht die Hausnummer eh' schon im Feld Straße ...

        Noch schlimmer sind die dämlichen Entwickler, die meinen, irgendwelche Auftrennungen und Formatierungsvorgaben bei Telefonnummern machen zu müssen. Da werden stets neue Tiefen der Benutzerunfreundlichkeit ausfindig gemacht. Insbesondere kann dabei das sklavische Einhalten von Normen zu für menschliche Benutzer völlig unbrauchbaren Ergebnissen führen.

        Freundliche Grüße

        Vinzenz

  3. gudn tach!

    $a = preg_split('/[0-9]/', $str, 2, PREG_SPLIT_DELIM_CAPTURE);
    [...] warum verschluckt er mir die zahl 3?

    "Falls dieses Flag gesetzt ist, werden auch die eingeklammerten Ausdrücke des Trennsymbol-Suchmusters erfasst und zurückgegeben."
    siehe php-manual.

    bei dir ist nix eingeklammert.

    deshalb besser: '/([0-9])/' bzw. '/(\d)/' oder (ohne PREG_SPLIT_DELIM_CAPTURE) '/(?=\d)/'.

    aber such mal im archiv nach "hausnummer" oder "adresse" und solchen begriffen. das thema gab's hier schon haeufig.

    prost
    seth