Yani bu ağaç veri yapısını dönüştürmek istiyorum:
<total>
<tag>content</tag>
<tag2 ref="333">
<code>somecode</code>
<code>morecode</code>
</tag2>
<tag3> more code </tag3>
</total>
Düz bir dizi çeşit içine:
Array
(
[0] => "<tag>content</tag>"
[1] => "<tag2 ref="333"></tag2>"
[2] => "<code>somecode</code>"
[3] => "<code>morecode</code>
[4] => "<tag3> more code </tag3> "
)
zor olurdu. Bu iyi answerers bir sürü yok klasik CS sorundur. Ağaç yapısı düz dizi ya da liste yok girişler arasındaki ilişkiler hakkında bilgi sağlar. Bir liste halinde ağacı düzleştirmek için her türlü girişimi olduğu başvuru bağlam kaybedecektir.
Ya dize patlayabilir ve sonra (tag2 bakınız) ana unsurları izleyebilmek veya onları görmezden yürüyebiliyordu. Ben xml ile bir şeyler yapmak zorunda eğer ben böyle bir şey üretmek hangi bir SimpleXMLElement içinde düşeceği:
SimpleXMLElement Object
(
[tag] => content
[tag2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[ref] => 333
)
[code] => Array
(
[0] => somecode
[1] => morecode
)
)
[tag3] => more code
)
Bu grubu ben foreach ile yürümek ve etiket bulmak ve içeriğini olabilir. Ben içeriği dizeleri veya alt öğeleridir ve eğer öyleyse onları yürümek olmadığını test edebilirsiniz. Bir recursive fonksiyon bu sorunun oldukça kısa çalışma yapacak. En büyük sorun bu düzleşir kez verileri temsil etmek için nasıl.
Eğer dizi örnekte içine düzleştirmek daha önce üst sağlanan ve çocuk etiketleri birbirlerine herhangi bir zımni ilişkisi gevşek. Bu büyük bir sorun değil, eğer. Özyinelemeli fonksiyon yazın ve bitirdiniz. İşte bazı psudocode olduğunu:
function walking($content)
$out is the array chunk that is returned
foreach $content as $tag->$data
if $value is an SimpleXMLElement
collapse $data[@attributes] into a string $attributes
append <$tag $attributes></$tag> to the end of $out
you may need to remove @attributes before recursing.
recurse into walking($data) and append the returned array to the end of $out
if $value is an Array
append <$tag></$tag> to the end of $out
recurse into walking($data) and append the returned array to the end of $out
if $value is a string
append <$tag>$value</$tag> to the end of $out
after looping through $content return $out.
Eğer bir şekilde bu ilişkileri sağlam tutmak gerekir Ancak eğer bir sorun biraz var ve bunun için düzeni çeşit hazırlamak için ihtiyacınız olacak