simplexml: daten in array und doppelte werte vermeiden
-
Hallo!
Ich lese mit simplexml_load_file eine xml Datei ein.
Der Aufbau ist Schematisch so:
<?xml version="1.0" encoding="UTF-8"?> <data> <tour> <band></band> <text></text> <picture></picture> <subnote></subnote> <presenter></presenter> <concert> <date></date> <city></city> <venue></venue> <doors></doors> <stage></stage> <tickets></tickets> </concert> <concert> <date></date> <city></city> <venue></venue> <doors></doors> <stage></stage> <tickets></tickets> </concert> </tour> </data>
Kann natürlich auch mehrere Konzerte bzw. Touren beinhalten. Danach will ich eigentlich eine Liste mit Städten erstellen, die keine Dopplungen hat. Dazu habe ich Folgenden Code:
if(fopen(__TOURDATES__, "r")) // check if the file exists { //create an object by xml file $obj = simplexml_load_file(__TOURDATES__); //array with cities $cities = array(); foreach($obj->tour as $tour) { foreach($tour->concert as $concert) { $city = (string)$concert->city; if(!in_array(strtolower($city), $cities)) $cities[] = $city; } } //sort array by city names natsort($cities); //output the list of cities foreach($cities as $e) echo $e; }
Ich bekomme eine Liste der Städte, die nach Alphabet sortiert ist, aber leider sind auch Doppelte Werte möglich. Liegt es daran, dass ich keine reinen String Werte verarbeite? Was muss ich anders machen?
Vielen Dank schonmal!
Edit: Auch mit einem expliziten Typecast funktioniert das ganze nicht (siehe oben). array_unique() hat auch keinen effekt.
-
<?php $str =<<<EOT <?xml version="1.0" encoding="UTF-8"?> <data> <tour> <band></band> <text></text> <picture></picture> <subnote></subnote> <presenter></presenter> <concert> <date></date> <city>Wien</city> <venue></venue> <doors></doors> <stage></stage> <tickets></tickets> </concert> <concert> <date></date> <city>Wien</city> <venue></venue> <doors></doors> <stage></stage> <tickets></tickets> </concert> <concert> <date></date> <city>Berlin</city> <venue></venue> <doors></doors> <stage></stage> <tickets></tickets> </concert> </tour> </data> EOT; $obj = simplexml_load_string($str); $cities = array(); foreach($obj->tour as $tour) { foreach($tour->concert as $concert) { $city = strtolower((string)$concert->city); if(!in_array($city, $cities)) $cities[] = $city; } } natsort($cities); foreach($cities as $e) { echo $e; }
funktioniert einwandfrei...
-
Jo ich habs inzwischen hinbekommen.
Danke