Andy: explode() auf Zeilenumbruch in Tabellenfeld anwenden

Hallo liebe Community.

Ich habe mich schon die ganze Zeit schwarz gegoogelt. Ich kann keine Lösung finden.

Ich habe in einem Datenbank-Feld, ich nenne es mal 'Name', einen Wert, der sich über zwei Zeilen erstreckt. Der Wert wurde mit einem Zeilenumbruch gespeichert:

Vorname
Nachname

Exakt so, wie es hier steht, wäre es auch in der Datenbank. Bevor jetzt aber Diskussionen ausbrechen. warum ich nicht für Vor- und Nachname eine eigene Spalte nehme: Das ist nur ein Beispiel. Es handelt sich um ganz andere Daten.

Es geht um Formulardaten. Es ist eine riesige Datenbank, die alle abgeschickten Formulare speichert:

anrede;vorname;nachname;strasse;plz;ort;nachricht
Herr;~Max;~Mustermann;~Musterstraße 123;~12345;~Musterstadt;~Keine Nachricht

Mein Problem besteht nun darin, dass ich die beiden Zeilen einfach nicht getrennt bekomme.

Ich habe es schon mit folgenden Zeilen probiert:

$foo = explode( $row['submittedfields'], chr(10) );
und
$foo = explode( $row['submittedfields'], "\n" );

Ich kann eben diesen Datenbank-Aufbau auch leider nicht ändern. Das passiert durch eine Applikation, die ich nicht umschreiben darf, da der Rest der Anwendung dann nicht mehr lauffähig ist.

Ich wäre euch sehr dankbar für Tipps/Tricks und dieses Problem zu lösen.
Vielen Dank schonmal im Vorraus.

  1. Hi,

    Ich habe es schon mit folgenden Zeilen probiert:

    $foo = explode( $row['submittedfields'], chr(10) );
    und
    $foo = explode( $row['submittedfields'], "\n" );

    Ich weiss nicht, was genau du jetzt in $row['submittedfields'] drin stehen hast - aber dass es in chr(10) oder "\n" mehrfach enthalten ist, so dass sich ein "Auftrennen" daran lohnen würde, kann ich mir schlecht vorstellen.
    Auch generell gibt es an einem Textstring von nur einem Zeichen Länge wenig aufzutrennen.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Vielen lieben Dank ;-) Erst habe ich die Nachricht etwas fehlgedeutet, aber dann habe ich gesehen was du meinst: Ich habe die Parameter von explode() vertauscht.

      Einen schönen Tag noch und das war auch schon die Lösung :-)

      Hi,

      Ich habe es schon mit folgenden Zeilen probiert:

      $foo = explode( $row['submittedfields'], chr(10) );
      und
      $foo = explode( $row['submittedfields'], "\n" );

      Ich weiss nicht, was genau du jetzt in $row['submittedfields'] drin stehen hast - aber dass es in chr(10) oder "\n" mehrfach enthalten ist, so dass sich ein "Auftrennen" daran lohnen würde, kann ich mir schlecht vorstellen.
      Auch generell gibt es an einem Textstring von nur einem Zeichen Länge wenig aufzutrennen.

      MfG ChrisB

  2. Ich habe es schon mit folgenden Zeilen probiert:
    $foo = explode( $row['submittedfields'], chr(10) );
    und
    $foo = explode( $row['submittedfields'], "\n" );

    Ein Blick in die Doku (explode()) hätte das Rätsel gelöst.

    Ich wäre euch sehr dankbar für Tipps/Tricks und dieses Problem zu lösen.

    Un das Problem zu lösen (CSV-Ähnliche Daten zu parsen) ist explode(); sicher ein richter Ansatz - allerdings sollte man das Rad nicht neu erfinden: str_getcsv()

    1. Hi!

      Kleine Anmerkung:

      (CSV-Ähnliche Daten zu parsen) [...]: str_getcsv()

      ... was seit dieser Woche nutzbar ist. Ob allerdings die betroffenen Systeme schon auf PHP 5.3 hochgerüstet worden sind ...

      Lo!

  3. Vielen Dank für die bisherigen Antworten.

    Hier ist nochmal des exakte Inhalt:

    anrede;vorname;nachname;strasse;plz;ort;nachricht
    Herr;~Max;~Mustermann;~Musterstraße 123;~12345;~Musterstadt;~Keine Nachricht

    In der ganzen Online-Anwendung werden mehr als 15 verschiedene Formulare genutzt, die sich nur in einer Sache gleichen: Die Benennung der Formular-Felder.

    Die oben abgebildeten Felder sind lediglich die, die ich am besten aus allen Formularen extrahieren muss, leider sind aber auch manche einfach leer, und viele FOrmulare haben einige Felder mehr.

    Dadurch kann ich str_getcsv() nicht einfach verwenden.

    In vielen Formularen kann ein weiteres Feld zwischen denen stehen, die ich benötige, weshalb ich beabsichtige ein neues angepasstes Rad zu erfinden.

    Auch arbeitet str_getcsv() lediglich mit einem einstelligen Delimeter - in der zweiten Zeile meines Datenbank-Feldes sieht man aber, dass ich dort als Delimeter folgendes brauche: ';~' - summa summarum: 2 Zeichen.

    Nach der Doku über str_getcsv also nicht möglich.

    Meine Absicht ist es, die erste Zeile 'anrede;vorname;nachname;strasse;plz;ort;nachricht' in $foo[0] und die zweite Zeile 'Herr;~Max;~Mustermann;~Musterstraße 123;~12345;~Musterstadt;~Keine Nachricht' in $foo[1] abzulegen. Das ist meine Basis - ab dort kann ich mein Rad bauen.

    1. Hi,

      Meine Absicht ist es, die erste Zeile 'anrede;vorname;nachname;strasse;plz;ort;nachricht' in $foo[0] und die zweite Zeile 'Herr;~Max;~Mustermann;~Musterstraße 123;~12345;~Musterstadt;~Keine Nachricht' in $foo[1] abzulegen.

      Du möchtest vielleicht file() zum Einlesen des Dateiinhaltes nutzen?

      MfG ChrisB

      --
      Light travels faster than sound - that's why most people appear bright until you hear them speak.