如何访问 Collection 中的项目
How to access item in a Collection
我有两个collection。
首先 Collection 是根项目的所有后代(不是 children),扁平结构,换句话说,我的数据库中扁平组织中的所有项目:
$descendants = $root->getDescendants();
我通过这个 collection 使用 foreach:
foreach ($descendants as $key => &$item) {}
对于每个项目,我都做了一些魔法,但是,我需要将这个魔法只投射到这个项目的后代(而不是 children)(它是 $descendants 项目的子集,相同的项目!)。
我继续,得到了sub-descendants:
$itemDescendants = $item->getDescendants();
foreach ($itemDescendants as $key => &$item) {
//modify $item, but in $descendants Collection
}
我知道,第一个 foreach 中的 $key !== 第二个 foreach 中的 $key。
如何在 $descendants Collection 中访问 $item(并获取其 $key)进行编辑,意思是,我直接在 $descendants Collection 中更改属性,我 return 在函数末尾?
我需要来自$descendants 的$item 的$key,这样我就可以直接在$descendants 中修改它:
$descendants[$key]->user_permissions = array();
我查看了 Laravel Documentation,最接近的是搜索,但不起作用:
$childItem = $descendants->search($item);
完整代码如下所示:
$descendants = $root->getDescendants();
foreach ($descendants as $key => &$item) {
$itemDescendants = $item->getDescendants();
foreach ($itemDescendants as $key => &$childItem) {
$mainChildItem = $descendants->search($childItem); //I would need to get a key ($childKey), not item..
$user_permissions = array();
//check if permissions are already set
if(!empty($mainChildItem->permissions)){
$permissions = $mainChildItem->permissions;
}
$user_permissions['all'] = ($user_permissions['all'] !== 0) ? $contentPermission['all'] : $user_permissions['all'];
$user_permissions['view'] = ($user_permissions['view'] !== 0) ? $contentPermission['view'] : $user_permissions['view'];
$descendants[$childKey]->user_permissions = array(); //missing $childKey
}
}
return $descendants;
现在,可能不是最佳解决方案,我遍历 $descendants 并将键保存在 item->id 索引上:
foreach($descendants as $key=>$item){
$descendantsKeys[$item->id] = $key;
}
当我想访问 $descendants 中的特定项目时,我使用这个数组来搜索键。
$itemKey = $descendantsKeys[$childItem->id];
然后将此项目保存在 main Collection $descendants:
$descendants[$itemKey]->user_permissions = array();
我打赌有更好的方法,但需要继续开发..
我有两个collection。
首先 Collection 是根项目的所有后代(不是 children),扁平结构,换句话说,我的数据库中扁平组织中的所有项目:
$descendants = $root->getDescendants();
我通过这个 collection 使用 foreach:
foreach ($descendants as $key => &$item) {}
对于每个项目,我都做了一些魔法,但是,我需要将这个魔法只投射到这个项目的后代(而不是 children)(它是 $descendants 项目的子集,相同的项目!)。
我继续,得到了sub-descendants:
$itemDescendants = $item->getDescendants();
foreach ($itemDescendants as $key => &$item) {
//modify $item, but in $descendants Collection
}
我知道,第一个 foreach 中的 $key !== 第二个 foreach 中的 $key。
如何在 $descendants Collection 中访问 $item(并获取其 $key)进行编辑,意思是,我直接在 $descendants Collection 中更改属性,我 return 在函数末尾?
我需要来自$descendants 的$item 的$key,这样我就可以直接在$descendants 中修改它:
$descendants[$key]->user_permissions = array();
我查看了 Laravel Documentation,最接近的是搜索,但不起作用:
$childItem = $descendants->search($item);
完整代码如下所示:
$descendants = $root->getDescendants();
foreach ($descendants as $key => &$item) {
$itemDescendants = $item->getDescendants();
foreach ($itemDescendants as $key => &$childItem) {
$mainChildItem = $descendants->search($childItem); //I would need to get a key ($childKey), not item..
$user_permissions = array();
//check if permissions are already set
if(!empty($mainChildItem->permissions)){
$permissions = $mainChildItem->permissions;
}
$user_permissions['all'] = ($user_permissions['all'] !== 0) ? $contentPermission['all'] : $user_permissions['all'];
$user_permissions['view'] = ($user_permissions['view'] !== 0) ? $contentPermission['view'] : $user_permissions['view'];
$descendants[$childKey]->user_permissions = array(); //missing $childKey
}
}
return $descendants;
现在,可能不是最佳解决方案,我遍历 $descendants 并将键保存在 item->id 索引上:
foreach($descendants as $key=>$item){
$descendantsKeys[$item->id] = $key;
}
当我想访问 $descendants 中的特定项目时,我使用这个数组来搜索键。
$itemKey = $descendantsKeys[$childItem->id];
然后将此项目保存在 main Collection $descendants:
$descendants[$itemKey]->user_permissions = array();
我打赌有更好的方法,但需要继续开发..