Ron: Zugriff auf ein Array (preg_match_all)

Hallo,

ich möchte via preg_match_all eine Datei(HTML) auslesen, die mehrere Zeilen in folgendem Format enthält:

<dd>mal ein Beispiel</dd>
<dd>noch ein Beispiel</dd>
<dd>noch eins</dd>
<dd>das nächste</dd>
<dd>wieder eins</dd>
<dd>usw...</dd>

Das war jetzt nur ein Beispiel.

Mein Codeschnipsel liefert mir (angezeigt mit var_dump() bspw. folgendes:

array(2) { [0]=>  array(7) { [0]=>  string(660) "1234     " [1]=> string(19) "
    21.12.2008"[2]=>  string(14) "
    2.554" [3]=> string(13) "    2.80" [4]=> string(15) "
    75000" [5]=> string(18) "
    Ein Wort" [6]=> string(15) "
    mal ein Beispiel" } [1]=> array(7) { [0]=> string(651) "1234     " [1]=>  string(10) "21.12.2008" [2]=>  string(5) "2.554" ... Das geht noch ein Stück so weiter.

Warum wird das wiederholt und wie kann ich letztendlich auf die Inhalt zugreifen bzw. sie weiterverarbeiten? Bspw. brauch ich als Variable das Datum, welches ja auch zweimal zu sehen ist.

Was mache ich da für Müll *g* Kann ich das evtl. eleganter lösen? Meine paar Zeilen sehen wie folgt aus:

preg_match_all("%<dd>(.*?)</dd>%s", $content, $test);
echo "<br><br>VarDump<br><br>";
var_dump($test);

Vielen Dank für eure Hilfe und Anregungen.

  1. Moin!

    Wenn das hier dein Beispielfragment ist:

    <dd>mal ein Beispiel</dd>
    <dd>noch ein Beispiel</dd>
    <dd>noch eins</dd>
    <dd>das nächste</dd>
    <dd>wieder eins</dd>
    <dd>usw...</dd>

    ... dann kann das hier kein Ergebnis des Funktionsaufrufs sein:

    array(2) { [0]=>  array(7) { [0]=>  string(660) "1234     " [1]=> string(19) "
        21.12.2008"[2]=>  string(14) "
        2.554" [3]=> string(13) "    2.80" [4]=> string(15) "
        75000" [5]=> string(18) "
        Ein Wort" [6]=> string(15) "
        mal ein Beispiel" } [1]=> array(7) { [0]=> string(651) "1234     " [1]=>  string(10) "21.12.2008" [2]=>  string(5) "2.554" ... Das geht noch ein Stück so weiter.

    Abgesehen davon ist es auch noch mieserabel unübersichtlich formatiert. Tipp: Wenn du var_dump verwendest, dann entnehme den Dump entweder aus dem HTML-QUELLtext, oder schreibe den Dump in die HTML-Tags <pre> und </pre>. Dann sieht man die Einrückungen viel besser.

    Du solltest also nochmal nachbessern bei deiner Beschreibung. Verwende ein konkretes Beispiel durchgehend in deinen Tests. Nimm gerne ein zusammengebautes, reduziertes, künstliches Stück HTML mit unrealen, aber realistischen Werten. Wenn du dein Problem soweit reduzierst, dass es mit einem minimalen Datensatz noch auftritt, kann man sich drauf konzentrieren, was da abläuft.

    Insgesamt darf man von der Funktion preg_match_all aber sagen, dass sie halt ein mehrdimensionales Array mit den Fundstellen zurückgibt - und die einzelnen Informationen sich darin durchaus wiederholen, je nachdem, was im regulären Ausdruck gesucht und eingeklammert ist.

    Ich vermute daher, dass du dich eher von den konkreten Daten verwirren lässt, die vom regulären Ausdruck untersucht werden. Umso wichtiger ist die Reduktion der Eingangsdaten auf ein extrem übersichtliches Maß. Also beispielsweise zwei Blöcke mit deutlich unterscheidbaren Daten.

    - Sven Rautenberg