如何从Cloudinary API返回的PHP对象中获取指定视频元数据?
解决Cloudinary Api\Response对象的视频元数据取值问题
嘿,我看你在提取Cloudinary视频元数据时踩了个小坑——从你贴的print_r($result)输出能看出来,$result是一个Cloudinary\Api\Response对象,它继承自PHP的ArrayObject,不是普通的关联数组,所以你之前用数组索引或者直接访问私有属性名称的方式肯定会报「未定义索引」错误。
正确的取值方式
因为ArrayObject实现了ArrayAccess接口,你可以直接像操作普通数组一样访问它的内部数据,或者先转换成纯数组再操作:
方式1:直接以数组形式访问
// 获取视频宽度 echo $result['width']; // 获取视频的安全链接 echo $result['secure_url']; // 获取第一个衍生资源的URL echo $result['derived'][0]['url'];
方式2:先转换成纯数组再操作
如果你更习惯处理数组,可以先用getArrayCopy()方法把对象转换成数组:
$responseData = $result->getArrayCopy(); // 然后正常访问数组元素 echo $responseData['height']; // 输出456 echo $responseData['derived'][1]['bytes']; // 输出3293
为什么之前的方式无效?
echo $result[4]['width']:你把对象当成了数字索引的数组,但这个对象的内部数据是关联数组结构,没有数字索引,所以肯定找不到对应的元素。echo $result['storage:ArrayObject:private']['width']:storage:ArrayObject:private是ArrayObject类的私有内部存储属性,外部代码无法直接访问私有属性,自然会报错。
这样就能顺利拿到你需要的视频元数据啦!
内容的提问来源于stack exchange,提问作者mark-in-motion
相关产品推荐
相关产品推荐

