php dizi veya dizi değil?

6 Cevap php

Ben bir şey yapıyorum ... anlamak ve ben print_r ne zaman ($ var) yok; ben bir dizi var olduğunu söyler, bu yüzden doğal olarak ben ne zaman ben henüz bir dizi olduğunu düşünüyorum

if(is_array($xml->searchResult->item))

yanlış döndürür

Ben foreach ile bu dizi kullanmak (); belgelerinde bu foreach () başka bir şey ama dizi çalışma, bu yüzden bu ben çalışıyorum bir dizi olduğunu varsayarak olmaz diyor ...

plus, if I try to access it via
echo $xml->searchResult->item[3];
i will get 4th element of my array

6 Cevap

print_r ayrıca diziler sanki nesneleri yazdırır.

değişken bir dizi ise de, is_array () aksi takdirde, false döndürür true döndürür. Senin durumunda, $ xml-> SearchResult-> madde bir dizi değil görünüyor. Için çıkış ne

var_dump($xml->searchResult->item)

? Bir başka ipucu: Eğer gettype () üzerinden bir değişkenin türünü belirleyebilirsiniz.

is_array () tek gerçek php diziler için true döndürür. Bu ArrayAccess sınıfını kullanarak "sahte" bir dizi oluşturmak mümkündür. Yani (örneğin [3] öğesi olarak) normal bir dizi semantik kullanabilirsiniz ama gerçek bir dizi değil, olduğunu. Ben $ öğe bir nesne olduğunu sanıyorum. Yani kullanmak

 if($x instanceof ArrayAccess || is_array($x))

Bunun yerine.

plus, if I try to access it via echo $xml->searchResult->item[3]; i will get 4th element of my array

Yani özellikle değiştirmediğiniz sürece ilk eleman her zaman 0, doğru.

Manuel foreach de nesneler üzerinde çalışıyor, ve bu özellikleri üzerinde yineleme olacak söz yok.

Ben henüz başka bir özel durum SimpleXML kullanıyorsunuz sanırım çünkü durumunda, durum biraz daha farklıdır. SimpleXMLElement Ben SPL 's Iterator arayüzleri herhangi uygulamak için görünmüyor gibi kodlanmış varsayalım kendi yineleyici vardır.

Uzun lafın kısası, bazı nesneler as bir dizi kullanılabilir, ancak onlar are not biri.

Sadece dizi tarafından iade edilmiştir ne kontrol etmek için dikkatli olun. Boş olan sınıf veya stdClass ile bir nesne olabilir ve ondan öğesi alınamıyor.