Simplexml-Objekt zu int umwandeln

Guten Tag.

Ich habe ein kleines Problem mit Simplexml.

Mit folgendem Code lese ich eine Zahl aus einer XML-Datei aus und schreibe sie in eine Variable:

[PHP]

<?php $test = simplexml_load_file("beispiel.xml"); $zahl["test"] = $test -> zahl; ?>

[/PHP]beispiel.xml:

<test> <zahl>2.5</zahl> </test> Das Problem ist, das in $zahl[„test“] nicht 2.5 sodern ein Objekt gespeichert wird.
$zahl[„test“] ist also vom Typ object.
Deswegen kann ich $zahl[„test“] nicht verwenden, um mit ihr zu rechnen.
Also muss ich $zahl[„test“] in eine Variable vom Typ int umwandeln.

Allerdings will mir das einfach nicht gelingen!

Ich habe schon alle möglichen Möglichkeiten ausprobiert:

[PHP]
$zahl[„test“] = settype($zahl[„test“], int);
[/PHP]oder

[PHP]
$zahl[„test“] = (int) $zahl[„test“];
[/PHP]oder

[PHP]
$zahl[„test“] = $zahl[„test“] + 0;
[/PHP]Aber egal welche Möglichkeit ich verwende: $zahl[„test“] wird zwar zu int, aber ihr Wert ist 0.

Könntet mir einer dabei helfen, $zahl[„test“] zu einer Varibale vom Typ int zu machen, die immer noch den Wert 2.5 hat?

Danke schon mal im voraus!

Schau dir mal SimpleXML an.

Gruß

Danke erst einmal für den Link,
aber ehrlich gesagt bin ich immer noch nicht schlauer :wink:

Könntest du mir konkret bei meinem Problem helfen?

Kann es sein das du gelogen hast und deine XML-Datei sieht anders aus?

Klar sieht sie anders aus - ich habe sie auf das wesentliche reduziert und ein Beispiel gegeben.
Der ganze Rest drumherum würde wohl wenig nützen. (Aber lügen würde ich das nicht nennen.)

Aber aus deiner Aussage kann ich entnehmen, dass du einen Gedanken hast, woran es liegen könnte.
Darum schreibe ich hier einfach mal den ganzen Inhalt der XML-Datei rein:

preisliste.xml:

[CODE]

<?xml version="1.0" encoding="ISO-8859-1" ?> 4.00 4.50 0.50 0.70 1.00 1.30 1.20 1.60 [/CODE]Und hier der Ausschnitt, der die Datei verarbeitet:

[PHP]
class preise {

(…)

protected function erstelle_preisliste() {

$preisliste = simplexml_load_file($this -> preisliste_datei);

// schreibt die Preise für Grundpizzen in ein globales Array
$GLOBALS["preise_grundpizza"] = array();
$GLOBALS["preise_grundpizza"]["groesse1"] = $preisliste -> grundpizza -> groesse1;
$GLOBALS["preise_grundpizza"]["groesse2"] = $preisliste -> grundpizza -> groesse2;

// schreibt die Preise für Beläge der Preiskategorie 1 in ein globales Array
$GLOBALS["preise_belaege_preiskategorie1"] = array();
$GLOBALS["preise_belaege_preiskategorie1"]["groesse1"] = $preisliste -> belaege -> preiskategorie1 -> groesse1;
$GLOBALS["preise_belaege_preiskategorie1"]["groesse2"] = $preisliste -> belaege -> preiskategorie1 -> groesse2;

// schreibt die Preise für Beläge der Preiskategorie 2 in ein globales Array
$GLOBALS["preise_belaege_preiskategorie2"] = array();
$GLOBALS["preise_belaege_preiskategorie2"]["groesse1"] = $preisliste -> belaege -> preiskategorie2 -> groesse1;
$GLOBALS["preise_belaege_preiskategorie2"]["groesse2"] = $preisliste -> belaege -> preiskategorie2 -> groesse2;

// schreibt die Preise für Beläge der Preiskategorie 3 in ein globales Array
$GLOBALS["preise_belaege_preiskategorie3"] = array();
$GLOBALS["preise_belaege_preiskategorie3"]["groesse1"] = $preisliste -> belaege -> preiskategorie3 -> groesse1;
$GLOBALS["preise_belaege_preiskategorie3"]["groesse2"] = $preisliste -> belaege -> preiskategorie3 -> groesse2;

}

(…)

}
[/PHP]Später soll dann mit diesen Preisen gerechnet werden.

Danke schon mal im voraus, das du versuchst, mir zu helfen. :slight_smile:

Dann wandel die Werte doch in den Typ float um:

[php]$GLOBALS[„preise_grundpizza“][„groesse1“] = (float)$preisliste → grundpizza → groesse1;[/php]

Super, funktioniert!
Vielen Dank!

An float habe ich gar nicht gedacht :oops:

OK, nochmal vielen dank :smiley:

Darf ich fragen wieso du sämtliche Werte in die Superglobale $GLOBALS schiebst anstatt dafür eine Objekteigenschaft zu verwenden?

Weil ich sie alle in mehreren Klassen brauche.

Und wie wäre es wenn du das Objekt an die Klassen übergibst, die die Werte benötigen? Dann kannst du über das Objekt auf die Eigenschaften zugreifen.

$GLOBALS zu verwenden ist unsauber.