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など)を介して実行したい場合、アルゴリズムは配列構造を分析する必要があります (各 [フォルダー] の名前を確認し、存在するかどうかを確認します)。 1 つ以上のフォルダ ['_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
)
この構文は機能しません。
編集:構文は機能しますが、気にしないでください...助けてくれてありがとう!