• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

IDX3.01 Daten auslesen und darstellen

- Warum wird am Anfang immer ein leeres <li> ausgegeben? Ist die foreach-Schleife nicht korrekt gesetzt?

Mit dem Delimiter beginnt die Datei, oder?
Wenn du das jetzt explodest, was hast du vor dem ersten "IDX3.01#immo"? Genau: Nichts.
Dieses "Nichts" belegt ebenfalls einen Platz im Array. Daher das leere <li>.

- Kann ich ein array, welches exploded ist nochmals weiter exploden? Da ich nicht alle Informationen benötige und die, welche ich benötige, noch in diverse DIVs schreiben möchte.

Na klar:
Code:
explode('#', $item);

Das Problem mit der unterschiedlichen Anzahl an #-Zeichen ist mir ursprünglich auch aufgefallen.
Es scheint zwar ganz nach dem Zufallsprinzip zu sein, aber eigentlich kann ich mir nicht vorstellen dass man so etwas wirklich macht.
Vielleicht weiß aber sonst jemand warum das so ist.
 
Werbung:
Das stimmt. Ich überspringe das erste Element mit:

PHP:
$output = array_shift($array); // hidden the first <li>-element

Ich versuche nun das "explodete" array wie folgt nochmals zu exploden:

PHP:
<?php
    $data_immo = file_get_contents('data/unload.txt');
    $array = explode('IDX3.01#immo', $data_immo);
   
    $output = array_shift($array); // hidden the first <li>-element
   
    $object_title = explode('RENT', $array);
    foreach ($object_title as $item) {
        echo '<li>' . htmlentities($item) . '</li>';
    }
?>

Anscheinend habe ich dort einen "Logik-Hänger", denn es wird nichts mehr geworfen.
 
Das stimmt. Ich überspringe das erste Element mit:

PHP:
$output = array_shift($array); // hidden the first <li>-element

Ich versuche nun das "explodete" array wie folgt nochmals zu exploden:

PHP:
<?php
    $data_immo = file_get_contents('data/unload.txt');
    $array = explode('IDX3.01#immo', $data_immo);

    $output = array_shift($array); // hidden the first <li>-element

    $object_title = explode('RENT', $array);
    foreach ($object_title as $item) {
        echo '<li>' . htmlentities($item) . '</li>';
    }
?>

Anscheinend habe ich dort einen "Logik-Hänger", denn es wird nichts mehr geworfen.

Das fällt schon unter Programmier-Basics…

Du musst natürlich die Loops verschachteln. Deshalb steht in meinem Beispiel auch "$item" und nicht "$array"
 
Zuletzt bearbeitet:
Werbung:
Ich interpretiere die Rauten als einfaches Trennzeichen, so wie Kommata oder Semikolons in csv Dateien. Wenn 22 hintereinander kommen bedeutet das, dass hier 21 columns keinen Wert haben. IDX Dateien sind als Index-Dateien gemeint, die Formate sind alle ziemlich unterschiedlich aber alle sind für die schnelle Durchsuchbarkeit optimiert, daher die absurde Spaltenanzahl.

Ich würde an deiner Stelle mal die Rauten pro Zeile zählen. Wenn meine These stimmt, müssen das immer gleich viele sein. Wenn ja, explode mal wirklich mit "#" und schreib das in eine Tabelle. Aus der Gesamtansicht sollten dann auch die relevanten Tabellenheader deutlich werden.
 
Ich habe es jetzt wie folgt gemacht und es passt so für mich:

PHP:
<?php
                   
    $data_immo = file_get_contents('data/unload.txt');
    $objects = explode('IDX3.01#immo', $data_immo);
    $output = array_shift($objects); // hidden the first <li>-element
   
    foreach ($objects as $item) {
            $data_details = preg_split ("/\#/", $item);
           
            $picture_1_filename = htmlentities($data_details[45]);
            $object_title = htmlentities($data_details[15]);
            $available_from = " ab " . htmlentities($data_details[14]);
           
           
            echo "<li><img alt='' src='data/images/" . $picture_1_filename . "' /><h2>" . $object_title . $available_from . "</h2></li>";
        }

?>

Nur wie kann ich den Zusatz " ab " bei der Variable $available_from nicht ausgeben lassen, wenn dieser Wert nicht mitgeliefert wird?
 
Werbung:
Zurück
Oben