Cakephp 通过它获取集合项目';s键

Cakephp 通过它获取集合项目';s键,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我有一个Cake\Collection\Collection: object(Cake\Collection\Collection) { 'count' => (int) 5 } 当我调试它的toArray()输出时,我可以看到它包含一个带有特定键的项(比如123)。那么,如果我想直接通过该键获取项,而不将集合转换为数组,该怎么办 我仔细看了一遍,没有找到任何看起来像是普通吸气剂的东西 $collection[1234](当然)抛出致命错误:无法将Cake\collecti

我有一个
Cake\Collection\Collection

object(Cake\Collection\Collection) {

    'count' => (int) 5

}
当我调试它的
toArray()
输出时,我可以看到它包含一个带有特定键的项(比如123)。那么,如果我想直接通过该键获取项,而不将集合转换为数组,该怎么办

  • 我仔细看了一遍,没有找到任何看起来像是普通吸气剂的东西
  • $collection[1234]
    (当然)抛出致命错误:无法将Cake\collection\collection类型的对象用作数组
  • $collection->get(123)
    抛出致命错误:调用未定义的方法ArrayIterator::get()
于是我就发现,;它有,实际上作为
$collection->offsetGet(123)
工作


但是,上面没有提到
ArrayIterator
,所以这感觉像是未记录的CakePHP用法。我做得对吗?否则,如何通过集合项的键获取集合项?

鉴于集合的工作方式,您不能像在数组中那样只访问键,必须首先计算集合及其所有筛选器、聚合器和内容,然后才能查找键

我不知道为什么没有通过键获取项目的速记方法,可能是因为每个集合都不同,界面不应该太混乱,但有一些方法可以按键过滤集合:

$value=$collection
->过滤器(函数($value,$key){
返回$key==123;
})
->第一个();
这将返回集合中键为
123
的第一项

不鼓励使用
offsetGet()
(或任何其他内部迭代器方法),因为它不会计算集合!例如,假设集合上有一个过滤器,它可以减少集合,这样就不再有
123
键,使用
offsetGet()
它仍然会返回一个值:

$collection=collection([123=>'foo','abc'=>'baz']);
$filtered=$collection
->过滤器(函数($value,$key){
返回$key==='abc';
});
$value=$filtered->offsetGet(123);
调试($值);
$values=$filtered->toArray();
调试($值);
考虑到集合中有一个过滤器,该过滤器仅包括名为
abc
的键,但
offsetGet(123)
将对未过滤的数据进行操作,并且仍然返回
123
键的值,因此可以预期
$value
null

调试##########
“福”
###########################
##########调试##########
[
“abc”=>“baz”
]
###########################

考虑到集合的工作方式,您不能像在数组中那样只访问一个键,必须首先评估集合及其所有筛选器、聚合器和内容,然后才能查找键

我不知道为什么没有通过键获取项目的速记方法,可能是因为每个集合都不同,界面不应该太混乱,但有一些方法可以按键过滤集合:

$value=$collection
->过滤器(函数($value,$key){
返回$key==123;
})
->第一个();
这将返回集合中键为
123
的第一项

不鼓励使用
offsetGet()
(或任何其他内部迭代器方法),因为它不会计算集合!例如,假设集合上有一个过滤器,它可以减少集合,这样就不再有
123
键,使用
offsetGet()
它仍然会返回一个值:

$collection=collection([123=>'foo','abc'=>'baz']);
$filtered=$collection
->过滤器(函数($value,$key){
返回$key==='abc';
});
$value=$filtered->offsetGet(123);
调试($值);
$values=$filtered->toArray();
调试($值);
考虑到集合中有一个过滤器,该过滤器仅包括名为
abc
的键,但
offsetGet(123)
将对未过滤的数据进行操作,并且仍然返回
123
键的值,因此可以预期
$value
null

调试##########
“福”
###########################
##########调试##########
[
“abc”=>“baz”
]
###########################