Я использую массивы в 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 / Имя папки / Subfolder2 ), алгоритм должен проанализировать структуру массива (проверить имя каждая [папка], проверьте, есть ли одна или несколько папок ['_c'] или [число]) - все хорошо, но я не могу найти способ создать переменную, которая будет иметь " массив " путь к этому новому файлу.
Я думал где-то так:
$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
)
Этот синтаксис не работает.
Редактировать: Синтаксис работает, неважно ... Спасибо за вашу помощь, ребята!