Ich verwende Arrays in PHP, um XML-Daten zu modifizieren und zurückzuschreiben. Dies ist die XML-Struktur (zu Demonstrationszwecken vereinfacht):Wie verwende ich eine Variable, um auf ein bestimmtes Element innerhalb eines mehrdimensionalen Arrays zuzugreifen?
<docs>
<folder>
<name>Folder name</name>
<date>20.06.2009</date>
<folder>
<name>Subfolder1</name>
<date></date>
</folder>
<folder>
<name>Subfolder1</name>
<date></date>
</folder>
<file>
<name></name>
</file>
</folder>
<name></name>
<date></date>
</docs>
Mit this code, dies wird dann in ein mehrdimensionales Array analysiert und transformiert:
Array
(
[docs] => Array
(
[_c] => Array
(
[folder] => Array
(
[_c] => Array
(
[name] => Array
(
[_v] => Folder name
)
[date] => Array
(
[_v] => 20.06.2009
)
[folder] => Array
(
[0] => Array
(
[_c] => Array
(
[name] => Array
(
[_v] => Subfolder1
)
[date] => Array
(
[_v] =>
)
)
)
[1] => Array
(
[_c] => Array
(
[name] => Array
(
[_v] => Subfolder1
)
[date] => Array
(
[_v] =>
)
)
)
)
[file] => Array
(
[_c] => Array
(
[name] => Array
(
[_v] =>
)
)
)
)
)
[name] => Array
(
[_v] =>
)
[date] => Array
(
[_v] =>
)
)
)
)
Langwierige, ich weiß. Aber jetzt zum eigentlichen Problem. Wenn ich eine andere Datei in einen Unterordner namens Subfolder2 in diesem Fall hinzufügen will, dann ist es kein Problem, es von Hand zu tun, wenn u die Struktur sehen:
array_push($array['docs']['_c']['folder']['_c']['folder'][1], $newfile);
Nun, wenn ich es über das tun will Funktion, die nur einen Pfad zum Ordner kennt (wie docs/Ordnername/Unterordner2), muss der Algorithmus die Array-Struktur analysieren (überprüfen Sie den Namen jedes [Ordners], prüfen Sie, ob es einen oder mehrere Ordner ['_c '] oder [Nummer]) - alles gut, aber ich kann keine Möglichkeit finden, eine Variable zu erstellen, die einen Pfad " Array" für diese neue Datei haben würde.
Ich dachte, irgendwo in dieser Richtung:
$writepath = "['docs']['_c']['folder']...[1]"; // path string
array_push($array{$writepath}, $newfile);
Natürlich ist dies keine gültige Syntax.
Also, wie kann ich eine Variable erstellen, die einen Pfad durch die Array-Elemente enthält? Ich habe ein wenig Forschung über w3c und php.net gefunden keine hilfreiche Informationen über multidimensionale Arrays ...
Wenn jemand irgendwelche anderen Vorschläge in Bezug auf Struktur, Xml Transformation/Manipulation usw. auf alle Fälle, ich weiß, es ist weit von der ausreichenden Art der Datenverarbeitung.
Vielen Dank für jede Eingabe,
Erik
Edit: die Referenz In Bezug auf, ist es möglich, den Bezug zu verweisen? Wie würde man so den "Zeiger" durch eine Reihe von Arrays bewegen? Etwas als solche:
$pointer = &$array['docs'];
if (key($pointer) == '_c') { $pointer = &$pointer['_c']; }
else (
// create an array with '_c' key instead of empty '_v' array
)
Diese Syntax funktioniert nicht.
Edit: Die Syntax funktioniert, egal ... Vielen Dank für all Ihre Hilfe Jungs!
Die Verwendung von Xpath ist eine sehr nette Lösung für dieses Problem. Es dauert etwas länger zu lernen, als nur eine xml -> Array-Lösung zu verwenden, aber ich denke, es würde sich auf lange Sicht auszahlen. –
Große Antwort! Ich denke, ich kann anfangen, die SimpleXML-Erweiterung zu erkunden, da es viel einfacher zu verwalten ist. Es tut jedoch require PHP 5. Danke vielmals! –