У меня есть код, который извлекает HTML из внешнего источника:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xml = @simplexml_import_dom($doc); // just to make xpath more simple
$images = $xml->xpath('//img');
$sources = array();
Тогда, если я добавлю все источники с этим кодом:
foreach ($images as $i) {
array_push($sources, $i['src']);
}
echo "<pre>";
print_r($sources);
die();
Я получаю этот результат:
Array
(
[0] => SimpleXMLElement Object
(
[0] => /images/someimage.gif
)
[1] => SimpleXMLElement Object
(
[0] => /images/en/someother.jpg
)
....
)
Но когда я использую этот код:
foreach ($images as $i) {
$sources[] = (string)$i['src'];
}
Я получаю этот результат (что является желаемым):
Array
(
[0] => /images/someimage.gif
[1] => /images/en/someother.jpg
...
)
Что вызывает эту разницу?
Что такого особенного в array_push ()?
Спасибо
РЕДАКТИРОВАТЬ: Хотя я понимаю, что ответы совпадают с тем, что я спрашиваю (я наградил), я больше хотел бы знать, почему при использовании array_push или другой нотации добавляется объект SimpleXMLElement, а не строка, когда оба не брошены. Я знал, что при явном приведении к строке я получу строку. Смотрите следующий вопрос: Почему эти значения не добавляются в мой массив в виде строк?