Zeichenkette in mehrere arrays zerlegen

Andre267

Erfahrenes Mitglied
Schönen guten Abend/Morgen,

ich versuche gerade via php eine Zeichenkette in mehrere arrays zu zerlegen, damit ich damit besser arbeiten kann mit php.

Hier ein Beispiel:
[["Bruno","809493459385743985",["War ein böser Junge"],5000],[["Bernd","949345943985",["Ist hingefallen"],340]

Das Muster ist ja erkennbar:
Name, userID, Bemerkung, Bußgeld

Ich weiß leider nur nicht wie man diese Zeichenketten auseinander nimmt.
Kann mir jemand da weiter helfen?
 
Das Zauberwort ist hier preg_match_all.
Der schnellste Code ist dieser:
PHP:
$search = "[[\"Bruno\",\"809493459385743985\",[\"War ein böser Junge\"],5000],[[\"Bernd\",\"949345943985\",[\"Ist hingefallen\"],340]";
preg_match_all( "/\[\[\"(.+?)\",\"(.+?)\",\[\"(.+?)\"\],(.+?)\]/is", $search, $output );
Allerdings muss man da ein bisschen Aufpassen bei der Auswertung. Sollte aber auch kein Problem sein.
Hier ist die Ausgabe das $output-Array.

Dieser Code sortiert die Angaben etwas anders und ist damit etwas einfacher auszuwerten.
PHP:
$search = "[[\"Bruno\",\"809493459385743985\",[\"War ein böser Junge\"],5000],[[\"Bernd\",\"949345943985\",[\"Ist hingefallen\"],340]";
preg_match_all( "/\[\[\"(.+?)\",\"(.+?)\",\[\"(.+?)\"\],(.+?)\]/is", $search, $output );
foreach( $output[0] as $val ) {
    preg_match( "/\[\[\"(.+?)\",\"(.+?)\",\[\"(.+?)\"\],(.+?)\]/is", $val, $tmp );
    $out2[] = $tmp;
}
Hier muss dann das $out2-Array weiter genutzt werden.
 
Das funktioniert aber doch nicht wenn ich nicht "[[\"Bruno\", mache.
Die Zeichenkette ist viel länger die ich damit auslesen will als das ich das manuell machen könnte. :)
 
Die heredoc syntax verstehe ich nicht. o_O

Ein Kollege hat mir gesagt, das ich das mit json_decode machen soll, aber leider hatte er keine Zeit das näher aus zu führen.

Das sind wie gesagt solche Zeichenketten hier:
Beispiel
Code:
[[\"[AIF] Camperkm\",\"24653256435\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Arryson\",\"235234234\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Camperkm\",\"24653256435\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Arryson\",\"235234234\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Camperkm\",\"24653256435\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Arryson\",\"235234234\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Camperkm\",\"24653256435\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Arryson\",\"235234234\",[\"Raub\",\"Raub\"],50000]]

Die sind halt sehr sehr lang und manchmal steht da nicht nur Raub sondern noch einige Dinge mehr wie Punkte Konto voll usw.
 
json_decode geht mWn nciht, da PHP-Json keine Array kennt.

übrigends passt dein neues Beispiel nicht mit dem ersten überein. Die innerste Klammer enthält hier 2 Werte - weiter oben nur einer. Was ist den nun richtig

Mit 2 inneren Werten:
Code:
/\["([^"]+)","([^"]+)",\["([^"]+)","([^"]+)"\].(\d+)\]/

Das Testscript:
PHP:
  <?PHP
  //
  // Text, der durchsucht werden soll
  //
  $subject = '[[\"[AIF] Camperkm\",\"24653256435\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Arryson\",\"235234234\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Camperkm\",\"24653256435\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Arryson\",\"235234234\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Camperkm\",\"24653256435\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Arryson\",\"235234234\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Camperkm\",\"24653256435\",[\"Raub\",\"Raub\"],50000],[\"[AIF] Arryson\",\"235234234\",[\"Raub\",\"Raub\"],50000]]';
  //
  // Der Reguläre Ausdruck
  //
  $pattern = '/\["([^"]+)","([^"]+)",\["([^"]+)","([^"]+)"\].(\d+)\]/';
  //
  // RegExp auswerten
  //
  $result = preg_match_all($pattern, $subject, $subpattern, PREG_SET_ORDER);
  //
  // Ergebnis ausgeben
  //
  echo '<p>Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text '.
       (($result) ? $result.' mal ' : 'nicht ').'zu.</p>';
  //
  // Unterausdrücke ausgeben
  //
  echo '<pre>'.print_r($subpattern, TRUE).'</pre>';
?>
ergibt
Code:
Array
(
    [0] => Array
        (
            [0] => ["[AIF] Camperkm","24653256435",["Raub","Raub"],50000]
            [1] => [AIF] Camperkm
            [2] => 24653256435
            [3] => Raub
            [4] => Raub
            [5] => 50000
        )
    [1] => Array
        (
            [0] => ["[AIF] Arryson","235234234",["Raub","Raub"],50000]
            [1] => [AIF] Arryson
            [2] => 235234234
            [3] => Raub
            [4] => Raub
            [5] => 50000
        )
    [2] => Array
        (
            [0] => ["[AIF] Camperkm","24653256435",["Raub","Raub"],50000]
            [1] => [AIF] Camperkm
            [2] => 24653256435
            [3] => Raub
            [4] => Raub
            [5] => 50000
        )
    [3] => Array
        (
            [0] => ["[AIF] Arryson","235234234",["Raub","Raub"],50000]
            [1] => [AIF] Arryson
            [2] => 235234234
            [3] => Raub
            [4] => Raub
            [5] => 50000
        )
    [4] => Array
        (
            [0] => ["[AIF] Camperkm","24653256435",["Raub","Raub"],50000]
            [1] => [AIF] Camperkm
            [2] => 24653256435
            [3] => Raub
            [4] => Raub
            [5] => 50000
        )
    [5] => Array
        (
            [0] => ["[AIF] Arryson","235234234",["Raub","Raub"],50000]
            [1] => [AIF] Arryson
            [2] => 235234234
            [3] => Raub
            [4] => Raub
            [5] => 50000
        )
    [6] => Array
        (
            [0] => ["[AIF] Camperkm","24653256435",["Raub","Raub"],50000]
            [1] => [AIF] Camperkm
            [2] => 24653256435
            [3] => Raub
            [4] => Raub
            [5] => 50000
        )
    [7] => Array
        (
            [0] => ["[AIF] Arryson","235234234",["Raub","Raub"],50000]
            [1] => [AIF] Arryson
            [2] => 235234234
            [3] => Raub
            [4] => Raub
            [5] => 50000
        )
)
 
Ich habe den php Code 1 zu 1 kopiert und bei mir kommt folgendes dabei raus:
Code:
Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text nicht zu.

Array
(
)

Das Beispiel ist übrigens richtig was ich genannt habe, denn ich habe oben geschrieben das die Inhalte/Werte variieren können.

Hier ein weiteres Beispiel:
Code:
[\"Darkcrawler\",\"234354534634\",[\"Punktekonto voll\"],50000],[\"Mr. Schnitzel\",\"345346435345353\",[\"Führen eines illegalen Fahrzeugs\",\"Falsch parken\",\"Gefährdende Fahrweise\",\"Lärmbelästigung\",\"Beamtenbeleidigung\",\"Beamtenbeleidigung\",\"Beamtenbeleidigung\",\"Beamtenbeleidigung\",\"Beamtenbeleidigung\",\"Beamtenbeleidigung\",\"Beamtenbeleidigung\",\"Beamtenbeleidigung\",\"Beamtenbeleidigung\",\"Beamtenbeleidigung\",\"Widerstand gg die Staatsgw.\",\"Missbrauch des Notrufs\"],106500],[\"BurningPlanet\",\"345345456546\",[\"Punktekonto voll\",\"Punktekonto voll\",\"Raub\"],125000],[\"Goasnpeda\",\"45345234564535\",[\"Punktekonto voll\"]

Ich hoffe ich konnte an dem Beispiel gut zeigen, was ich versuche zu erklären. :)
 
Nope- Ich will nicht den String. Sondern dein Script, wie du testest

Nachtrag:
Ersetze \" durch " solange du nicht den ganzen String in " innerhalb des Codes gesetzt hast.
Oder du musst den Pattern umschreiben, damit er nach \" sucht und nicht nach "
 

Neue Beiträge

Zurück