数组切割cfsimplexml对象

时间:2011-09-01 18:32:00

标签: php cakephp-1.3

我有一个像这样的数组

[17] => CFSimpleXML Object
        (
            [Key] => habteen.mp3
            [Size] => 5931725
         )   

[18] => CFSimpleXML Object
        (
            [Key] => lawnesareh.mp3
            [LastModified] => 2011-05-07T22:24:15.000Z

        )

我希望得到Key和size的值。我该怎么做?

2 个答案:

答案 0 :(得分:7)

CFSimpleXML对象是Amazon Webservices PHP api的一部分,它提供了SimpleXML的包装。它有一个特殊的构造函数,可以捕获未知的函数调用并将它们转换为xpath请求。

默认响应是返回另一个CFSimpleXML对象,通常只需要该值,因此必须将其强制转换为正确的类型。

$key = (string)$array[17]->Key

另一个更复杂的例子可能看起来像这样。如果您在AWS上有一个已知的EC2实例,并且您需要其可用区域,那么它的外观如何:

$description = $ec2->describe_instances(array('InstanceId' => $instance_id));

$availability_zone = (string)$description->body->reservationSet->item->instancesSet->item->placement->availabilityZone;

其中$ ec2是AmazonEC2对象的实例,$ instance_id是您的实例的id(类似于i-6301ea00)。返回的$ description将作为CFSimpleXML对象返回,因此上面的函数调用实际上将转换为XML文档的遍历以获取availabilityZone。

答案 1 :(得分:2)

以下内容将遍历数组项并检查对象是否具有KeySize属性:

foreach($arr as $item)
{
   if(isset($item->Key))
   {
       $item->Key;
   }
   if(isset($item->Size))
   {
       $item->Size;
   }
}