PHP içinde iç içe diziler çok üretmek için bir tanrı korkunç bir fikir mi?

3 Cevap php

Ben yinelemeli yürüyebilir iç içe diziler bir demet haline xml_parse_into_struct() tarafından oluşturulan 'Değerler' dizisi dönüştürmek istiyor. Bu hiyerarşik böylece gibi belge aramak çok basit bir XML sınıfı için:

$xml_data = "
<sometag>
    <someothertag>
        <somedata>foo</somedata>
    </someothertag>
    <someothertag>
        <somedata>bar</somedata>
    </someothertag>
</sometag>
<sometag>
    <someothertag>
        <somedata>baz</somedata>
    </someothertag>
</sometag>";

$parser = new Xml_Data($xml_data);
$somedata = $parser->find('sometag')->find('someothertag')->results();
// 0: "somedata"
//    "value": "foo"
// 1: "somedata"
//    "value": "bar"

// etc.

İç içe ilişkisel dizilerinde saklayarak her açıklığın takip ve etiketi kapanış daha çalışmak çok daha kolay yapmak ve onlar xml_parse_into_struct çıkışları gibi ortaya ne 'seviye' olacaktır. Ama ben merak ediyorum - belge oldukça büyük alırsa, bu büyük bir dizi korkunç olacak? Ben sadece PHP bana verdiği dizinin aptal versiyonunu vazgeçmek ve travers mıyım?

3 Cevap

En iyi etki için istediğini yapabilir ediyorum

$xml['sometag'][0]['someothertag'][1]['somedata'][0] # bar

Dizi her seviye için iki boyutu vardır nerede. Yani, tagname / tagindex değerlerinin çifttir.

Bu ölçeklenebilir ve okunabilir hem de.

Neden bunun için SimpleXML kullanmak için değil mi? Aynı yerleştirme modeli, ancak bunun yerine dizilerin nesneleri.

Kesin gereksinim hakkında emin değilim ama ben orada array_walk_recursive kullanabilirsiniz düşünüyorum.