web-dev-qa-db-ja.com

SimpleXMLElement to PHP Array

変数_$d_は_file_get_contents_関数からURLに渡されます。

_$answer = @new SimpleXMLElement($d);
_

以下はprint_r($answer)の出力です:

_SimpleXMLElement Object
(
  [Amount] => 2698
  [Status] => OK
  [State] => FL
  [Country] => USA
)
_

各要素の値を取得して配列に追加するにはどうすればよいですか?わかりません。

22
Codex73

$answerはすでに配列として機能できます。実際の配列に入れたい場合は、これを行うことができます。

$array = array();
foreach($answer as $k => $v) {
  $array[$k] = $v;
}
10
ZZ Coder

この単純なケースでは、型キャストも機能します。

$my_array = (array)$answer
54
dkinzer

これはうまくいくはずです:

$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

テキストがCDATAタグの間にある場合、すべてのXML子を配列に型キャストすると問題が発生する可能性があるため、この関数に問題があります。

これを修正するには、配列への型キャストの結果が空かどうかを確認します。もしそうなら、それを文字列に型キャストすると、適切な結果が得られます。

CDATAをサポートするように変更したバージョンを次に示します。

function SimpleXML2ArrayWithCDATASupport($xml)
{   
    $array = (array)$xml;

    if (count($array) === 0) {
        return (string)$xml;
    }

    foreach ($array as $key => $value) {
        if (!is_object($value) || strpos(get_class($value), 'SimpleXML') === false) {
            continue;
        }
        $array[$key] = SimpleXML2ArrayWithCDATASupport($value);
    }

    return $array;
}
6
Bo Pennings

この関数は、XML単純XML再帰を解析して配列再帰にします

function SimpleXML2Array($xml){
    $array = (array)$xml;

    //recursive Parser
    foreach ($array as $key => $value){
        if(strpos(get_class($value),"SimpleXML")!==false){
            $array[$key] = SimpleXML2Array($value);
        }
    }

    return $array;
}
0
user2960279