How to remove SimpleXMLElement Object from php arr

2019-04-01 01:24发布

问题:

I have read xml file using simplexml_load_file php function.

I have store xml data into php array but in some array its display array of xml like SimpleXMLElement Object ( [0] => some value )

When I am print xml data , its display properly but when I am assign xml value to php array its display as above xml object in array

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>";

回答1:

this will give you a simple associative array:

$array = json_decode(json_encode($xml), true);


回答2:

I have solved my problem using below code.

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>";
}


标签: php simplexml