Почему эти значения не добавляются в мой массив в виде строк? - PullRequest
0 голосов
/ 14 апреля 2011

В дополнение к моему вопросу здесь мне действительно интересно, почему я не получаю строки, добавленные в мой массив со следующим кодом.

Я получаю некоторый 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] - это элемент SimpleXMLEle, я понимаю это. Но , почему атрибут 'src' объекта THAT не находится, а находится в $ sources в виде строки, когда я ссылаюсь на него как $i['src']?

Ответы [ 2 ]

3 голосов
/ 14 апреля 2011

Почему $ i ['src'] не рассматривается как строка?

Потому что это не один - это объект SimpleXMLElement, который получает cast в строку, если используется в строковом контексте, но он все еще остается SimpleXMLElement в глубине души.

Чтобы сделать эту строку настоящей, принудительно произнесите ее:

array_push($sources, (string) $i['src']);  
1 голос
/ 14 апреля 2011

Потому что SimpleXMLElement::xpath() (цитирование) :

Возвращает массив SimpleXMLElement объекты

, а не массив строк.


Итак, элементы вашего $images массива являются SimpleXMLElement объектами, а не строками - вот почему вы должны приводить их к строкам, если вы хотите строки.

...