私が気付いたのは、AWS PHP SDKからの応答が単一の結果である場合もあれば、結果の配列である場合もあるということです。
この問題は、CFSimpleXML/SimpleXML オブジェクトを扱う際の知識不足が原因である可能性があります。
私はこれを行ういくつかの方法を試しましたが、どれもかなり難しいものでした。
何が起こっていますか
describe_load_balancers を使用した呼び出しの例
<?php
$elb = new AmazonELB();
$response = $elb->describe_load_balancers();
if ($response->isOK())
{
foreach($response->body->LoadBalancerDescriptions() AS $loadBalancer)
{
print_r($loadBalancer);
}
}
?>
結果が 1 つしかない場合は、次のように出力されます。
CFSimpleXML Object
(
[member] => CFSimpleXML Object
(
[SecurityGroups] => CFSimpleXML Object
(
)
[LoadBalancerName] => LBName1
[CreatedTime] => 2012-08-01T12:22:03.910Z
...
)
)
複数の結果がある場合は、次のように出力されます。
CFSimpleXML Object
(
[member] => Array
(
[0] => CFSimpleXML Object
(
[SecurityGroups] => CFSimpleXML Object
(
)
[LoadBalancerName] => LBName1
[CreatedTime] => 2012-08-01T12:22:03.910Z
...
)
[1] => CFSimpleXML Object
(
[SecurityGroups] => CFSimpleXML Object
(
)
[LoadBalancerName] => LBName2
[CreatedTime] => 2012-08-01T16:17:21.030Z
...
)
)
)
単一の結果がある場合に欲しいもの
CFSimpleXML Object
(
[member] => Array
(
[0] => CFSimpleXML Object
(
[SecurityGroups] => CFSimpleXML Object
(
)
[LoadBalancerName] => LBName1
[CreatedTime] => 2012-08-01T12:22:03.910Z
...
)
)
)
ループしてmember
配列かどうかを確認しようとしましたが、それでも CFSimpleXML オブジェクトとして返されるため、print_r
そこにあるという配列を検出できませんでした。
リストを反復処理して、コード内で SimpleXML から ELB のモデルを作成するか、属性を簡単に反復処理できるようにしたいと考えています。