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)。那么,如果我想直接通过该键获取项,而不将集合转换为数组,该怎么办
- 我仔细看了一遍,没有找到任何看起来像是普通吸气剂的东西
(当然)抛出致命错误:无法将Cake\collection\collection类型的对象用作数组$collection[1234]
抛出致命错误:调用未定义的方法ArrayIterator::get()$collection->get(123)
$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”
]
###########################