Xml verileri değiştirmek ve geri yazmak için PHP dizileri kullanıyorum. Bu (gösteri amacıyla basitleştirilmiş) xml yapısı:
<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>
this code, bu daha sonra ayrıştırılır ve çok boyutlu bir diziye dönüştü kullanma:
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] =>
)
)
)
)
Uzun, biliyorum. Ama şimdi asıl konuya. I Subfolder2 Bu durumda adında bir alt klasöre başka bir dosya eklemek istiyorsanız, u yapısını görünce elle bunu yapmak için bir sorun değil:
array_push($array['docs']['_c']['folder']['_c']['folder'][1], $newfile);
Ben (docs/Folder name/Subfolder2 gibi), algoritma (her [klasörün] adını kontrol dizisi yapısını analiz sahip tek bir klasörün yolunu bilen fonksiyonu ile bunu yapmak istediğinizde Şimdi, kontrol ederseniz orada tüm iyi, ama ben yeni dosya için bir "array" yolunu olurdu bir değişken oluşturmak için bir yol bulamıyorum - bir veya daha fazla klasör ['_c'] veya [sayı]) 'dir.
Ben bu satırları boyunca bir yerde düşünüyordum:
$writepath = "['docs']['_c']['folder']...[1]"; // path string
array_push($array{$writepath}, $newfile);
Tabii ki bu geçerli bir sözdizimi değildir.
Yani, nasıl dizi elemanları aracılığıyla bir yolunu içeren bir değişken yapabilir? W3C ve çok boyutlu diziler üzerinde hiçbir yararlı bilgi bulma php.net üzerinde biraz araştırma yaptım ...
Herkes elbette vb yapısı, xml dönüşüm / manipülasyon ile ilgili başka bir öneriniz varsa, ben bu kadar veri işleme yeterli yolundan olduğunu biliyoruz.
Herhangi bir giriş için teşekkürler,
Erik
Edit: referans ile ilgili olarak, başvuru başvuru mümkün mü? Bu dizilerin bir dizi aracılığıyla 'imlecini' taşımak için bir yol olurdu? Gibi bir şey:
$pointer = &$array['docs'];
if (key($pointer) == '_c') { $pointer = &$pointer['_c']; }
else (
// create an array with '_c' key instead of empty '_v' array
)
This syntax does not work.
Edit: sözdizimi işleri, ... tüm yardım çocuklar için teşekkürler aldırma!