Ayrıştırma birden çok XML tek sıralanmış diziye PHP ile beslemeleri

4 Cevap php

Ben şöyle bir sıralanabilir listesi oluşturmak istiyorsanız

  • $ Q1 [0], $ VAR2 [0] ...
  • $ Q1 [1], $ VAR2 [1] ...

Veriler birden aynı yapılandırılmış xml dosyalarından gelir:

$xmlfile="
<Level1>
 <Level2>
  <Level2Item VAR1="1" VAR2="2" ... />
  <Level2Item VAR1="4" VAR2="5" ... />
  <Level2Item VAR1="7" VAR2="8" ... />
 </Level2>
</Level1>";

//Extract each item
$xml = new SimpleXMLElement($xmlfile);
foreach ($xml->Level2[0] as $result) {
 array_push($VAR1Array, $result['VAR1']);
 array_push($VAR2Array, $result['VAR2']);
 //... etc etc
}
//sort
//$sortedArray = sort($VAR1Array);

Çıktı

Array(
  [0] => SimpleXMLElement Object([0] => 1)
  [1] => SimpleXMLElement Object([0] => 4)
  [2] => SimpleXMLElement Object([0] => 7)
)

Bu XML yapıdan, ne bir dizi veri depolama en iyi yolu nedir? Ben bir veya 2 VAR'lerin göre sıralamak ve sonuçları görüntülemek böylece tek bir dizideki tüm verileri toplamak mümkün olmak istiyorum.

4 Cevap

Ben size (bazı örnekler ile belirtmeniz gerekir) yapmaya çalışıyoruz sıralama ne tür pek emin değilim. Ama en iyi, sizin diziye XML parçaları yüklenirken olmaz.

$xmlfile="
<Level1>
 <Level2>
  <Level2Item VAR1="1" VAR2="2" ... />
  <Level2Item VAR1="4" VAR2="5" ... />
  <Level2Item VAR1="7" VAR2="8" ... />
 </Level2>
</Level1>";

//Extract each item
$xml = new SimpleXMLElement($xmlfile);
foreach ($xml->Level2[0] as $result) {
 $VAR1Array[] = (int) $result['VAR1'];
 $VAR2Array[] = (int) $result['VAR2'];
 //... etc etc
}

Son sort() referans olarak çalışır, bu yüzden (yani sadece sort($array); ki tüm çizgi gibi, ve sonra $array kriteri olacak bir değişkene eşit değilsiniz . başkalarının önerdi gibi yukarıdaki örnekte bir kullanıcı-tanımlı bir işlev kullanarak olmadan php varsayılan sıralama fonksiyonunu kullanabilirsiniz yok. Ve array_push biraz gibi int s olarak döküm halinde biraz daha yavaş ve bir diziye yeni bir öğe eklemek için PHP'nin $var[] sözdizimini kullanarak daha okumak zor.

Ayrıca, çift tırnak içine çıkmamış çift tırnak yapma (bu şekilde xmlfile $ atanamıyveya olduğunu tam emin değilim.

Bu kodda, $ XMLFILE tanımlamak için en iyi yol olacaktır:

$xmlfile = <<<XML
<Level1>
 <Level2>
  <Level2Item VAR1="1" VAR2="2" ... />
  <Level2Item VAR1="4" VAR2="5" ... />
  <Level2Item VAR1="7" VAR2="8" ... />
 </Level2>
</Level1>
XML;

veya

$xmlfile = '
<Level1>
 <Level2>
  <Level2Item VAR1="1" VAR2="2" ... />
  <Level2Item VAR1="4" VAR2="5" ... />
  <Level2Item VAR1="7" VAR2="8" ... />
 </Level2>
</Level1>';

Ben olsaydım, ben sadece bir dizi üzerine SimpleXMLElement tüm itin ve daha sonra istediğiniz gibi sıralamak için özel bir geri arama fonksiyonu () ile uasort kullanmak istiyorum. Bu çalışır mı?

$xml = simplexml_load_file(...); $table = array(); foreach ($xml->Level2[0] as $result) $table[] = $result->attributes(); function cmp_row($a, $b, $sortColumn) { if ($a == $b) return 0; return ($a

İsterseniz apinstein dedi gibi, aynı zamanda SimpleXMLElement tutmak ve bunları doğrudan sıralayabilirsiniz.