0

PHP とオブジェクト キー アクセスで問題が発生しました。

次のように、11 個の SimpleXMLElements の配列を返す SimpleXMLElement があります。

SimpleXMLElement Object
(
    [Power.AssetToAssetMapping] => Array
    (
        [0] => SimpleXMLElement Object
            (
                [AssetToAssetMappingID] => 36063
                [Supplier_x0020_Asset_x0020_Type] => Powerstrip
                [..etc..]

中かっこを使用して配列を分離しようとすると、配列の最初のレコードしか表示されません。他の 10 個は出力されません。

print_r( $xml->{'Power.AssetToAssetMapping'} );

オブジェクト全体を使用すると、11 件すべ​​てのレコードが表示されます。

print_r( $xml );

このオブジェクトの最初の子にアクセスする別の方法はありますか? $xml で返されたオブジェクトの各子に対して foreach を実行し、各要素に問題なくアクセスできますが、これは PHP のバグのようです。

4

2 に答える 2

3

を使用する場合print_r:

print_r( $xml->{'Power.AssetToAssetMapping'} );

SimpleXML は魔法のように、ここで最初に一致した要素のみを提供します。ただし、技術的には、その値を実際に使用すると、ゼロベースの整数インデックスを介して (または同様に)SimpleXMLElementすべて ( の形式で) または特定の値にアクセスできるようになります。TraversableArrayAccess

$xml->{'Power.AssetToAssetMapping'}[1];

たとえば<Power.AssetToAssetMapping>、ルート要素の下の 2 番目の要素です。

foreach ($xml->{'Power.AssetToAssetMapping'} as $element) {
    // each element
    print_r($element);
}

<Power.AssetToAssetMapping>たとえば、最初から最後まで、ルート要素の下のすべての要素に対する反復です。

この動作は に固有のものSimpleXMLElementであることに注意してください。シンプルは同じように動作しstdClassません。

于 2012-12-13T04:54:51.247 に答える
1

SimpleXMLElement オブジェクトを配列に変換するだけです ;)

$xml = (array)$xml;
于 2012-12-13T04:47:53.460 に答える