нарезание массива объекта cfsimplexml - PullRequest
1 голос
/ 01 сентября 2011

У меня есть такой массив

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

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

        )

, и я хочу получить значение ключа и размер.Как мне это сделать?

Ответы [ 2 ]

7 голосов
/ 28 октября 2011

Объект CFSimpleXML является частью PHP API API веб-сервисов Amazon, который предоставляет оболочку для SimpleXML.У него есть специальный конструктор, который перехватывает неизвестные вызовы функций и преобразует их в запросы xpath.

Ответ по умолчанию - возвращение другого объекта CFSimpleXML, который часто просто требует значения, поэтому необходимо привести его к соответствующемуtype.

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

Еще один более сложный пример может выглядеть примерно так.Если у вас есть известный экземпляр EC2 в AWS и вам нужна его зона доступности, то вот как это будет выглядеть:

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

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

Где $ ec2 - это экземпляр объекта AmazonEC2, а $ instance_id - это идентификатор вашего экземпляра.(что-то вроде i-6301ea00).Возвращаемое описание $ будет возвращено как объект CFSimpleXML, поэтому вызовы функций, приведенные выше, фактически преобразуются в обход XML-документа для получения доступностиZone.

2 голосов
/ 01 сентября 2011

Следующее будет проходить по элементам массива и проверять, есть ли у объектов свойства Key и Size:

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