我在 PHP 中使用数组来修改 xml 数据并将其写回。这是 xml 结构(为演示目的而简化):
<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>
使用此代码,然后将其解析并转换为多维数组:
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] =>
)
)
)
)
很长,我知道。但现在到了实际问题。在这种情况下,如果我想将另一个文件添加到名为Subfolder2的子文件夹中,那么当您看到结构时手动执行它不是问题:
array_push($array['docs']['_c']['folder']['_c']['folder'][1], $newfile);
现在,当我想通过只知道文件夹路径的函数(如docs/Folder name/Subfolder2)来执行此操作时,算法必须分析数组结构(检查每个 [文件夹] 的名称,检查是否有一个或多个文件夹 ['_c'] 或 [number]) - 都很好,但我找不到一种方法来创建一个变量,该变量将具有该新文件的“数组”路径。
我在沿着这些思路思考:
$writepath = "['docs']['_c']['folder']...[1]"; // path string
array_push($array{$writepath}, $newfile);
当然,这不是一个有效的语法。
那么,如何创建一个包含通过数组元素的路径的变量?我对 w3c 和 php.net 做了一些研究,发现没有关于多维数组的有用信息......
如果有人对结构、xml 转换/操作等有任何其他建议,我知道这远远不够数据处理的方式。
感谢您的任何意见,
埃里克
编辑:关于参考,是否可以参考参考?因为那将是通过一组数组移动“指针”的方式?像这样的东西:
$pointer = &$array['docs'];
if (key($pointer) == '_c') { $pointer = &$pointer['_c']; }
else (
// create an array with '_c' key instead of empty '_v' array
)
此语法不起作用。
编辑:语法有效,没关系...感谢您的所有帮助!