2016-10-18 8 views
1

xmlをオブジェクトに変換すると、すべてがprint_r($result);に従って問題なく表示されます。しかし、私は$result->titleを使用する場合は、オブジェクトの代わりの文字列を返し、$result->documentsをループするとき、それは本当に奇妙な取得します。..PHP - simplexml_load_stringが期待どおりに動作しない

$xml = '<return> 
    <id>65510</id> 
    <title>SMART</title> 
    <info/> 
    <documents> 
    <name>file_1.pdf</name> 
    <path>http://www.domain.com/documents/file_1.pdf</path> 
    </documents> 
    <documents> 
    <name>file_2.pdf</name> 
    <path>http://www.domain.com/documents/file_2.pdf</path> 
    </documents> 
    <documents> 
    <name>file_3.pdf</name> 
    <path>http://www.domain.com/documents/file_3.pdf</path> 
    </documents> 
</return>'; 

$result = simplexml_load_string($xml); 
print_r($result); /* returns: 

SimpleXMLElement Object 
(
    [id] => 65510 
    [title] => SMART 
    [info] => SimpleXMLElement Object 
     (
     ) 

    [documents] => Array 
     (
      [0] => SimpleXMLElement Object 
       (
        [name] => file_1.pdf 
        [path] => http://www.domain.com/documents/file_1.pdf 
       ) 

      [1] => SimpleXMLElement Object 
       (
        [name] => file_2.pdf 
        [path] => http://www.domain.com/documents/file_2.pdf 
       ) 

      [2] => SimpleXMLElement Object 
       (
        [name] => file_3.pdf 
        [path] => http://www.domain.com/documents/file_3.pdf 
       ) 

     ) 

) 
*/ 
$_VALUE['title'] = $result->title; 
print_r($_VALUE); /* returns: 

Array 
(
    [title] => SimpleXMLElement Object 
     (
      [0] => SMART 
     ) 

) 
*/ 

foreach ($result->documents as $key=>$value) { 
echo $key . "<br/>"; 
} /* returns: 

documents 
documents 
documents 

instead of returning: 
1 
2 
3 
*/ 

私はインデックス1,2,3を持つ配列であることを文字列と$result->documentsを返すために$result->titleを必要としています。

答えて

1

この場合、print_rechoの間に違いがあります。代わりにエコー

echo (string) $result->title; 

を試し印刷これは動作し、出力SMART

と配列

$p = 1; 
foreach ($result->documents as $value) { 
    echo $value->name . "<br/>"; 
    //for key 
    echo $p++.'</br>'; 
} 
+0

OKと、私はphpmailerの中でこれらの値を使用し、それがエラースローされます:致命的なエラー:キャッチされない例外」を例外 'メッセージ付き' 'SimpleXMLElement'のシリアライゼーションは許可されていません。 ' – Totallama

+0

OK'内部的にはすべて 'SimpleXMLElement'なので、大文字と小文字のデータを 'string'と入力する必要があります。' echo(string)$ result-> title ; ' –

+0

そして、アレイを試して? – Totallama

関連する問題