J'utilise des tableaux en PHP pour modifier les données XML et les réécrire. Ceci est la structure xml (simplifié à des fins de démonstration):Comment utiliser une variable pour accéder à certains éléments dans un tableau multidimensionnel?
<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>
En utilisant this code, c'est ensuite analysé et transformé en un tableau multidimensionnel:
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] =>
)
)
)
)
long, je sais. Mais maintenant, à la question réelle. Si je veux ajouter un autre fichier dans un sous-dossier appelé dossier2 dans ce cas, ce n'est pas un problème de le faire à la main quand u voir la structure:
array_push($array['docs']['_c']['folder']['_c']['folder'][1], $newfile);
Maintenant, quand je veux le faire via le fonction qui ne connait qu'un chemin vers le dossier (comme docs/Nom du dossier/Sous-dossier2), l'algorithme doit analyser la structure du tableau (vérifier le nom de chaque [dossier], vérifier s'il existe un ou plusieurs dossiers ['_c '] ou [nombre]) - tout est bon, mais je ne peux pas trouver un moyen de créer une variable qui aurait un chemin " tableau" pour ce nouveau fichier.
Je pensais quelque part le long de ces lignes:
$writepath = "['docs']['_c']['folder']...[1]"; // path string
array_push($array{$writepath}, $newfile);
Bien sûr, ce n'est pas une syntaxe valide. Donc, comment puis-je faire une variable qui contient un chemin à travers les éléments du tableau? J'ai fait un peu de recherche sur w3c et php.net trouver aucune information utile sur les tableaux multidimensionnels ...
Si quelqu'un a d'autres suggestions concernant la structure, la transformation/manipulation de xml etc. par tous les moyens, je sais que c'est loin d'une manière suffisante de traitement des données.
Merci pour toute entrée,
Erik
Edit: En ce qui concerne la référence, est-il possible de faire référence à la référence? Comme ce serait le moyen de déplacer le «pointeur» à travers un ensemble de tableaux? Quelque chose en tant que tel:
$pointer = &$array['docs'];
if (key($pointer) == '_c') { $pointer = &$pointer['_c']; }
else (
// create an array with '_c' key instead of empty '_v' array
)
Cette syntaxe ne fonctionne pas.
Modifier: La syntaxe fonctionne, peu importe ... Merci à tous pour votre aide les gars!
L'utilisation de xpath est une très bonne solution à ce problème. Il faut un peu plus de temps pour apprendre que d'utiliser une solution xml -> array, mais je pense que cela serait payant à long terme. –
Bonne réponse! Je suppose que je peux commencer à explorer l'extension SimpleXML car elle est beaucoup plus simple à gérer. Il fait cependant require PHP 5. Merci beaucoup! –