Perché questi valori non vengono aggiunti al mio arrays come stringhe?

Oltre alla mia domanda qui , mi sto davvero chiedendo perché non sto ottenendo stringhe aggiunte al mio arrays con il seguente codice.

Ottengo del codice HTML da una fonte esterna con questo:

$doc = new DOMDocument(); @$doc->loadHTML($html); $xml = @simplexml_import_dom($doc); // just to make xpath more simple $images = $xml->xpath('//img'); $sources = arrays(); 

Ecco l'arrays di immagini:

 Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [alt] => techcrunch logo [src] => http://s2.wp.com/wp-content/themes/vip/tctechcrunch/images/logos_small/techcrunch2.png?m=1265111136g ) ) ... ) 

Poi ho aggiunto i sorgenti al mio arrays con:

 foreach ($images as $i) { arrays_push($sources, $i['src']); } 

Ma quando stampo i risultati:

  echo "<pre>"; print_r($sources); die(); 

Ho capito:

 Array ( [0] => SimpleXMLElement Object ( [0] => http://www.domain.com/someimages.jpg ) ... ) 

Perché $i['src'] trattato come una string? L'elemento [src] originale non è notato where stampo $ immagini una string all'interno?

Per dirla in altro modo $ images [0] è un SimpleXMLElement, lo capisco. Ma perché l'attributo 'src' di quell'object non è se non in $ sources come string quando faccio riferimento a $i['src'] ?

Perché $ i ['src'] non è trattato come una string?

Becaue non è uno – è un object SimpleXMLElement che viene castato su una string se usato in un context string, ma rimane ancora un SimpleXMLElement a cuore.

Per renderlo una vera string, forza il cast:

 arrays_push($sources, (string) $i['src']); 

Perché SimpleXMLElement::xpath() (quoting) :

Restituisce una matrix di oggetti SimpleXMLElement

e non una serie di stringhe.

Pertanto, gli elementi della serie di $images sono oggetti SimpleXMLElement e non stringhe, motivo per cui devi eseguire il cast sulle stringhe, se vuoi stringhe.