Statistik |
Beiträge: 144.534 (Täglich: 19,19 )
Themen: 16.701
Mitglieder: 13.209
Neuestes Mitglied: zitronentee.
Ausl. d. letzten Minute: 189%
Ausl. d. letzten 5 Minuten: 180%
Ausl. d. letzten 15 Minuten: 198%
Aktulle Uhrzeit: 16:16
Freier Webspace: 4.03 TB
PHP-Version: 7.4.33
|
|
|
|
|
Array zu XML (PHP) |
|
Hallo!
Ich habe eine (eingentlich mehrere Dateien) mit einem Array. Insgesammt sind das um die 800 Zeilen. Das Array hat bis zu 6 Dimensionen, und die will ich jetzt in eine XML-Datei schreiben. Die erstem 50 Zeilen habe ich noch mit Hand gemacht, aber mit wäre ein Script lieber. Ich habe schon bei Google gesucht, aber fast passendes gefunden, nur, wie man aus XML-Dateien ein Array bastelt. Das einzig passende was ich gefunden habe geht aber nur mit einer Dimension
Kennt ihr ein Script, das Arrays in XML-Daten konvertiert?
|
|
10.02.2006 15:39 |
|
|
|
Hab's mir selber gemacht
In meinem Fall sieht das dann so aus:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
|
<?php
header("Content-type: text/xml");
echo("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>");
echo("<einheiten>");
$name = "Bisanu";
$config["einheiten"][$name]["forschung"]["rumpf"] = 2;
$config["einheiten"][$name]["forschung"]["panzerung"] = 2;
$config["einheiten"][$name]["forschung"]["antriebstechnologie"] = 1;
$config["einheiten"][$name]["forschung"]["nanotechnologie"] = 2;
$config["einheiten"][$name]["forschung"]["laser"] = 1;
$config["einheiten"][$name]["forschung"]["plasma"] = 2;
$config["einheiten"][$name]["forschung"]["weltraumdock"] = 2;
ausgabe($config["einheiten"]);
function ausgabe($arr, $name="", $sonstig=""){
foreach($arr AS $name => $value){
echo("<{$name} {$sonstig}>");
if(is_array($value)){
ausgabe($value, $name);
}
else{
echo($value);
}
echo("</{$name}>");
}
}
echo("</einheiten>");
?>
|
|
|
|
10.02.2006 17:04 |
|
|
Viktor
Administrator
Zeige Viktor auf Karte
Dabei seit: 15.08.2003
Beiträge: 31.570
363 Filebase-Einträge
Alter: 66 Jahre
Herkunft: NRW wBB-Version: wBB2.3 PHP-Version: 7.4.33 MySQL-Version: 10.5.19-MariaDB Wo bist du gehostet?: eigener Server
Bewertung:
Level: 71 [?]
Erfahrungspunkte: 237.782.565
Nächster Level: 266.777.854
|
|
|
10.02.2006 20:11 |
|
|
|
array2xml.php
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
|
<?php
header("Content-type: text/xml");
echo("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
echo("<einheiten>\n\n"); //Das root-Element öffnen
$deep = 0;
$nodeep = false;
/* Die Fuktion deep ist dafür zuständig, dass im Quelltext die Elemente richtig eingerückt werden.
Das ist nützlich, wenn man den Quelltext kopieren und bearbeiten will. */
function deep(){
global $deep;
global $nodeep;
if($nodeep == false){
echo("\n");
$i = 0;
while($i < $deep){
$i++;
echo("\t");
}
}
}
/* Hier wird aus dem Array eine XML-Datei erstellt.
Die Ãœbergabevariablen sind $arr=Das auszugebene Array.
Die anderen Parameter werden nur fürden rekrusiven Aufruf benötigt.
$name ist der Name des Elementes, $sonstig wird hinter den Namen gehängt
Beispiel: $name = "foo"; Ausgabe: "<foo>".
Oder: $name = "bar"; $sonstig = "id=\"2\""; Ausgabe: "<bar id="2">"
Die Funktion habe ich für meine Zwecke angepasst,
evtl. müsst ihr was verändern, um sie benutzen zu können. */
function ausgabe($arr, $name="", $sonstig="", $name_alt=""){
global $deep;
global $nodeep;
$name_alt = $name;
//Das übergebene Array wird durchgegangen
foreach($arr AS $name => $value){
/* Wenn der Element-Name eine Zahl ist, soll das Element so heißen
wie ihr Vorgänger, und als id ihren eigentlichen Namen haben */
if(is_int($name)){
$sonstig = "id=\"{$name}\"";
$name = $name_alt;
}
/* Es wird die Einrückung ausgegeben, dann der Element-Name
(kleingeschrieben!!!) und dann der Anhang ($sonstig) */
echo(deep($deep) . "<" . strtolower($name) . " {$sonstig}>");
/* Wenn der eigentliche Inhalt kein Array ist,
wird auf die Einrückung verzichtet. */
if(!is_array($value)){
$nodeep = true;
}
//Es wird eine weitere Tiefe (für die Einrückung) hinzugefügt
$deep++;
/* Wenn der Inhalt ein Array ist, wird er diese Funktion wieder
aufgerufen, und so ihr Inhalt auch ausgeben */
if(is_array($value)){
ausgabe($value, $name, "", $name_alt);
}
else{ //Wenn nicht, wird ihr Inhalt so ausgegeben
echo("{$value}");
}
$deep--; //Und eine Tiefe für die Einrückung wegenommen
//Und dann das Element geschlossen
echo(deep($deep) . "</" . strtolower($name) . ">\n");
$nodeep = false;
}
}
// -------------------------------- //
/* Das Array $config holen, es befindet sich in der
Datei data.php. Siehe unten... */
include("data.php");
ausgabe($config["einheiten"]); // Das Array als XML ausgeben
echo("</einheiten>"); //Das root-Element schließen
?>
|
|
data.php
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
|
/* Das hier ist ein Komisches Beispiel, es liegt daran,
dass ich ein Browsergame programmiere.
Das hier ist z.B. das 2. schlechteste Schiff */
$name = "Bisanu";
$config["einheiten"][$name]["forschung"]["Rumpf"] = 2;
$config["einheiten"][$name]["forschung"]["Panzerung"] = 2;
$config["einheiten"][$name]["forschung"]["Antriebstechnologie"] = 1;
$config["einheiten"][$name]["forschung"]["Nanotechnologie"] = 2;
$config["einheiten"][$name]["forschung"]["Laser"] = 1;
$config["einheiten"][$name]["forschung"]["Plasma"] = 2;
$config["einheiten"][$name]["forschung"]["Weltraumdock"] = 2;
//Waffen
$config["einheiten"][$name]["waffe"]["anzahl"] = 2;
$config["einheiten"][$name]["waffe"][1]["disabled"] = "false";
$config["einheiten"][$name]["waffe"][1]["eisen"] = 20;
$config["einheiten"][$name]["waffe"][1]["oel"] = 5;
$config["einheiten"][$name]["waffe"][1]["wasser"] = 5;
$config["einheiten"][$name]["waffe"][1]["kristalle"] = 5;
$config["einheiten"][$name]["waffe"][1]["adamantinium"] = 0;
$config["einheiten"][$name]["waffe"][1]["dauer"] =955; // In Sekunden |
|
=> Das gibt folgende Ausgabe:
[code]
<?xml version="1.0" encoding="ISO-8859-1"?>
<einheiten>
<Bisanu>
<forschung>
<rumpf>2</rumpf>
<panzerung>2</panzerung>
<antriebstechnologie>1</antriebstechnologie>
<nanotechnologie>2</nanotechnologie>
<laser>1</laser>
<plasma>2</plasma>
<weltraumdock>2</weltraumdock>
</forschung>
<waffe>
<anzahl>2</anzahl>
<waffe id="1">
<disabled>false</disabled>
<eisen>20</eisen>
<oel>5</oel>
<wasser>5</wasser>
<kristalle>5</kristalle>
<adamantinium>0</adamantinium>
<dauer>955</dauer> <!-- in Sekunden -->
<angriff>15</angriff>
<gewicht>15</gewicht>
</waffe>
</waffe>
</einheiten>
[code]
Und hier das Script zum sortieren:
array_advancedsort.php
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
|
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Das Lösungsskript array_advancedsort</title>
<link rel="stylesheet" type="text/css" href="../cookbook.css">
</head>
<body>
<h1>array_advancedsort.php</h1>
<div class="programlisting">
<?php
function aasort(&$array, $args)
{
$args = array_reverse($args);
foreach($args as $arg)
{
$temp_array = $array;
$array = array();
$order_key = substr($arg, 1, strlen($arg));
foreach($temp_array as $index => $nirvana)
{
$sort_array[$index] = $temp_array[$index][$order_key];
}
($arg[0] == "+") ? (asort($sort_array)) : (arsort($sort_array));
foreach($sort_array as $index => $dummy)
{
$array[$index] = $temp_array[$index];
}
}
}
$myarray[] = array("Name" => "Clemens", "Alter" => "11");
$myarray[] = array("Name" => "Jörg", "Alter" => "37");
$myarray[] = array("Name" => "Anton", "Alter" => "23");
$myarray[] = array("Name" => "Anton", "Alter" => "13");
aasort($myarray, array("+Name", "-Alter"));
echo '<pre>';
print_r($myarray);
echo '</pre>';
?>
</div><hr noshade><?php
$sub_dir = "";
$filename = "array_advancedsort.php";
include_once("../showsource.php");
?>
</body></html>
|
|
|
|
12.02.2006 11:57 |
|
|
|
|
|
|