PHP: SimpleXML ve Diziler

1 Cevap php

Bu kodu çalıştırdığınızda:

foreach($xml->movie as $movie) { if(isset($movie->photos)) { foreach ($movie->photos as $photo) { echo $photo."&nbsp;"; } echo "<hr/>"; } }

Ben gerçek veri güzel çıktı, mesela olsun bir satır gibi görünüyor

06397001.jpg 06397002.jpg 06397003.jpg 06397004.jpg 06397005.jpg

Ben bir dizi atmak Ama, tüm SimpleXML sarıcı etiketleri içerir ve jpgs dizinin kökünde değildir.

kodu:

foreach($xml->movie as $movie) { if(isset($movie->photos)) { $photos = array(); foreach ($movie->photos as $photo) { $photos[] = $photo; } } else $photos = ""; var_dump($photos); echo "<hr />"; }

örneğin Aynı satır gibi görünüyor

array (5) {[0] => nesne (SimpleXMLElement) 11. (1) {[0] => string (12) "06397001.jpg"} [1] => nesne (SimpleXMLElement) 12. (1) { [0] => string (12) "06397002.jpg"} [2] => nesne (SimpleXMLElement) 13. (1) {[0] => string (12) "06397003.jpg"} [3] => nesne (SimpleXMLElement) 14. (1) {[0] => string (12) "06397004.jpg"} [4] => nesne (SimpleXMLElement) 15. (1) {[0] => string (12) " 06397005.jpg "}}

Neden bu olay / nasıl ben bu yüzden ben sadece bunu echo gibi kök düzeyinde fotoğrafları bir dizi olsun kaldırmak olabilir mi?

Teşekkürler, tek satır kod biçimlendirme için üzgünüm; Ben satır sonları ile doğrudan yapıştırmaya çalıştım uğraşıyordu.

1 Cevap

SimpleXMLElement sonuçlar basit nesneler ve diziler gibi görünüyor, fakat normal nesneleri ve diziler yapamayacağı bazı sihirli şeyler yapmak. Eğer daha az kod kullanabilirsiniz böylece bu şekilde tasarlanmıştır.

Muhtemelen gibi bir şey ile sorununuzu çözebilir:

foreach($xml->movie as $movie) { 
  if(isset($movie->photos)) {
    $photos = array();
    foreach ($movie->photos as $photo) {
      $photos[] = "$photo"; 
      // or you could use, I believe: $photos[] = $photo[0] 
    }
  } 
  else $photos = "";
  var_dump($photos); echo "<hr />";
}

Bu neden oluyor? Bu değeri, bu elemanın metin içeriğinin olmak bir dize, eğer bir dizge olarak olarak işlenmiş bir SimpleXML eleman davranacaktır çünkü. Sadece dize döndü böylece ilk örnekte, Yankı kullanımı bir dize olarak elemanı tedavi edildi.