SimpleXML - echo / print_r возвращает разные значения - PullRequest
2 голосов
/ 13 июля 2010

Я пытаюсь преобразовать некоторые xml в объект json, используя PHP.

Это должно работать, но по какой-то причудливой причине оно терпит неудачу.

Может ли кто-нибудь предоставить какой-либо вклад.

// Loop Through images and return the right one.
$i = 1;
foreach($page->image as $image) {
    if ($i == $_GET['id']) {
         echo json_encode(array(
            'background' => $image['bgColor'],
            'image' => $image['source'],
            'caption' => $image['caption']
         ));
    }
    $i++;
}

Этот код возвращает следующее.

{"background":{"0":"000033"},
 "image":"0":"0210e849f02646e2f5c08738716ce7e8b3c1169112790078351021245495.jpg"},
 "caption":   {"0":"Frog"}}

print_r($image['bgColor']); shows 'SimpleXMLElement Object ( [0] => 000033 )'

echo $image['bgColor']; shows '000033'

Как мне проанализировать значения, такие как оператор echo вместо оператора print_r. Почему они разные?

1 Ответ

3 голосов
/ 13 июля 2010

Чем они отличаются

Поскольку эти переменные не являются внутренними строками, а объектами типа SimpleXMLElement, которые преобразуются в строки при выводе с помощью echo.

Чтобы использовать значения в другом месте, я обычно выполняю явное приведение:

$bg_color = (string) $image['bgColor'];

Канонический вопрос относительно преобразования элемента simplexml в строку приведен здесь:

...