PHP中如何不使用foreach通过键获取对象元素?
问题描述
我有一个Cake\ORM\ResultSet对象,里面包含多个Album实体,但无法在不使用foreach的情况下获取单个元素。对象结构如下:
object(Cake\ORM\ResultSet) id:0 { 'items' => [ (int) 0 => object(App\Model\Entity\Album) id:1 { 'id' => (int) 1 'name' => 'Album 1' 'images' => [ ] '[new]' => false '[accessible]' => [ ] '[dirty]' => [ ] '[original]' => [ ] '[virtual]' => [ ] '[hasErrors]' => false '[errors]' => [ ] '[invalid]' => [ ] '[repository]' => 'Albums' }, (int) 1 => object(App\Model\Entity\Album) id:5 { 'id' => (int) 3 'name' => 'Album 3' 'images' => [ ] '[new]' => false '[accessible]' => [ ] '[dirty]' => [ ] '[original]' => [ ] '[virtual]' => [ ] '[hasErrors]' => false '[errors]' => [ ] '[invalid]' => [ ] '[repository]' => 'Albums' }, (int) 2 => object(App\Model\Entity\Album) id:9 { 'id' => (int) 5 'name' => 'Album 5' 'images' => [ ] '[new]' => false '[accessible]' => [ ] '[dirty]' => [ ] '[original]' => [ ] '[virtual]' => [ ] '[hasErrors]' => false '[errors]' => [ ] '[invalid]' => [ ] '[repository]' => 'Albums' }, ] }
尝试过以下方法都失败了:
$albums['0'],报错:Cannot use object of type Cake\ORM\ResultSet as array$albums->{'1'}key($albums)
求指点如何不用foreach获取单个元素。
解决方案
Cake\ORM\ResultSet是CakePHP封装的结果集对象,不是普通数组,所以不能直接用数组下标或普通对象属性访问,以下是几种可行方法:
使用内置方法获取元素
- 获取第一个元素:调用
first()方法$firstAlbum = $albums->first(); - 获取指定索引的元素:调用
offsetGet()方法,传入索引值// 获取索引为1的元素 $targetAlbum = $albums->offsetGet(1);
- 获取第一个元素:调用
转换为普通数组后访问
先通过toArray()方法把ResultSet转成普通数组,之后就能用数组下标自由访问:$albumArray = $albums->toArray(); $firstAlbum = $albumArray[0]; $thirdAlbum = $albumArray[2];数组式直接访问(版本兼容)
如果你的CakePHP版本较新(通常3.0+),ResultSet实现了ArrayAccess接口,可直接用数组下标访问:$firstAlbum = $albums[0];若此方法报错,说明版本不支持,改用前两种方法即可。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

