继我的问题here之后,我实际上想知道为什么我没有使用以下代码将字符串添加到我的数组中。
我从外部源获取了一些HTML:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xml = @simplexml_import_dom($doc); // just to make xpath more simple
$images = $xml->xpath('//img');
$sources = array();
这是图像数组:
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
)
)
...
)
然后我将源添加到我的数组中:
foreach ($images as $i) {
array_push($sources, $i['src']);
}
但是当我打印结果时:
echo "<pre>";
print_r($sources);
die();
我明白了:
Array
(
[0] => SimpleXMLElement Object
(
[0] => http://www.domain.com/someimages.jpg
)
...
)
为什么不将$i['src']
视为字符串?是不是原始的[src]元素注意到我在那里打印$ images一个字符串?
换句话说,$ images [0]是一个SimpleXMLElement,我明白了。但为什么这个对象的'src'属性不是作为字符串引入$ source作为字符串 $i['src']
?
答案 0 :(得分:3)
为什么$ i ['src']不被视为字符串?
如果它不是一个 - 它是一个SimpleXMLElement对象,如果在字符串上下文中使用它会将强制转换为字符串,但它仍然是一个SimpleXMLElement。
要使它成为一个真正的字符串,强制施放它:
array_push($sources, (string) $i['src']);
答案 1 :(得分:1)
因为SimpleXMLElement::xpath()
(引用):
返回
SimpleXMLElement
的数组 对象
而不是字符串数组。
因此,$images
数组的项目是SimpleXMLElement
个对象,而不是字符串 - 这就是为什么你需要将它们转换为字符串,如果你想要字符串的话。