3

simplexml_load_filePHP関数を使用してxmlファイルを読みました。

私はxmlデータをphp配列に保存していますが、一部の配列ではxmlの表示配列ですlike SimpleXMLElement Object ( [0] => some value )

xmlデータを印刷しているときは正しく表示されますが、xml値をphp配列に割り当てると、上記のxmlオブジェクトが配列内に表示されます

XML

<data>
    <request>
        <type>City</type>
        <query>Anand, India</query>
    </request>
    <current_condition>
        <observation_time>08:55 AM</observation_time>
        <temp_C>28</temp_C>
        <temp_F>82</temp_F>
        <weatherCode>113</weatherCode>            
        <weatherDesc>Sunny</weatherDesc>
        <windspeedMiles>9</windspeedMiles>
        <windspeedKmph>14</windspeedKmph>
        <winddirDegree>63</winddirDegree>
        <winddir16Point>ENE</winddir16Point>
        <precipMM>0.0</precipMM>
        <humidity>23</humidity>
        <visibility>10</visibility>
        <pressure>1014</pressure>
        <cloudcover>0</cloudcover>
    </current_condition>
        <weather>
            <date>2012-12-22</date>
            <tempMaxC>33</tempMaxC>
            <tempMaxF>91</tempMaxF>
            <tempMinC>18</tempMinC>
            <tempMinF>64</tempMinF>
            <windspeedMiles>11</windspeedMiles>
            <windspeedKmph>17</windspeedKmph>
            <winddirection>ENE</winddirection>
            <winddir16Point>ENE</winddir16Point>
            <winddirDegree>63</winddirDegree>
            <weatherCode>113</weatherCode>
            <weatherDesc>Sunny</weatherDesc>
            <precipMM>0.0</precipMM>
        </weather>
        <weather>
            <date>2012-12-23</date>
            <tempMaxC>34</tempMaxC>
            <tempMaxF>92</tempMaxF>
            <tempMinC>18</tempMinC>
            <tempMinF>65</tempMinF>
            <windspeedMiles>9</windspeedMiles>
            <windspeedKmph>15</windspeedKmph>
            <winddirection>ENE</winddirection>
            <winddir16Point>ENE</winddir16Point>
            <winddirDegree>64</winddirDegree>
            <weatherCode>113</weatherCode>
            <weatherDesc>Sunny</weatherDesc>
            <precipMM>0.0</precipMM>
        </weather>
        <weather>
            <date>2012-12-24</date>
            <tempMaxC>33</tempMaxC>
            <tempMaxF>92</tempMaxF>
            <tempMinC>18</tempMinC>
            <tempMinF>64</tempMinF>
            <windspeedMiles>9</windspeedMiles>
            <windspeedKmph>14</windspeedKmph>
            <winddirection>NE</winddirection>
            <winddir16Point>NE</winddir16Point>
            <winddirDegree>45</winddirDegree>
            <weatherCode>113</weatherCode>
            <weatherDesc>Sunny</weatherDesc>
            <precipMM>0.0</precipMM>
        </weather>
    </data>

PHP:

$child=$xml->children();
foreach($xml->children() as $child)
{               
    foreach($child->children() as $child_t)
    { 
        $weather_arr[$child_t->getName()]=$child_t;
        echo $child_t->getName() . ": " . $child_t . "<br />";   

    }
}

echo "<pre>".html_entity_decode(print_r($weather_arr,true))."</pre>";
4

2 に答える 2

8

これにより、単純な連想配列が得られます。

$array = json_decode(json_encode($xml), true);
于 2012-12-25T08:51:14.017 に答える
2

以下のコードを使用して問題を解決しました。

function simplexml_to_array($xmlobj) {
    $a = array();
    foreach ($xmlobj->children() as $node) {
        if (is_array($node))
            $a[$node->getName()] = simplexml_to_array($node);
        else
            $a[$node->getName()] = (string) $node;
    }
    return $a;
} 


foreach($xml->children() as $child)
{
    $arr=simplexml_to_array($child );
    echo "<pre>".html_entity_decode(print_r($arr,true))."</pre>";
}
于 2012-12-25T10:18:56.017 に答える