2017-11-03 9 views
0

関数simplexml_load_stringに問題があります。 XML文字列を配列に変換したい。PHP - simplexml_load_stringインデックスの名前変更

$xml_string = file_get_contents($xml_file_name, LIBXML_NOCDATA); 
$xml = simplexml_load_string($xml_string, null, LIBXML_NOCDATA); 
$xml = json_decode(json_encode($xml), true); 

、これが私のXMLファイルの一部です:そこ私のスクリプトがある

<p id="1">test1</p> 
<p id="2">test2</p> 
<p id="3">test3</p> 
<p id="5">test5</p> 
<p id="10">test10</p> 
<p id="13">test13</p> 

変換した後、私の配列は以下のようになります。

array(6) { 
    [0]=> 
    string(10) "test1" 
    [1]=> 
    string(18) "test2" 
    [2]=> 
    string(24) "test3" 
    [3]=> 
    string(24) "test5" 
    [4]=> 
    string(11) "test10" 
    [5]=> 
    string(9) "test13" 
} 

そして今、見てインデックス。変換前のインデックスは1,2,3,5,10,13です。変換後、0,1,2,3,4,5が得られました。問題はどこですか?これらのインデックスは、関数simplexml_load_stringによって名前が変更されるのはなぜですか?

ありがとうございました。

+0

'1、2、3、5、10、インデックスが、彼らは属性があり、あなたが13' XMLを解析して取得する必要がありますされていません。

は、しかし、私はあなたがここで答えを見つける必要がありますねその価値。 – Mina

答えて

1

ここで実際に何をしているのかを理解する必要があります。 simplexml_load_stringを呼び出した後、タイプSimpleXMLElementのオブジェクトがあります。

http://php.net/manual/function.simplexml-load-string.php http://php.net/manual/class.simplexmlelement.php

このオブジェクトは属性ID-含むXMLからすべての情報が含まれています。

json_encodejson_decodeオブジェクトの場合、SimpleXMLElementのJSON表現はほとんどの場合属性を捨て去るため、属性は削除されます。

あなたがしなければならないことは:アトリビュートデータを失うことなくSimpleXMLElementを配列にキャストしたいと思っています。これを行うにはカスタム実装を含む多くの可能性があります。

Recursive cast from SimpleXMLObject to Array

関連する問題