我正在使用Parse.com API,但我不会说这是一个Parse问题。
我有一个名为$groups
的ParseObjects数组和一个名为$inputs
的ParseObjects数组。
我已经拥有这两个,所以我不想做任何新的查询。
所有输入对象都是其中一个组对象的子对象。我想获得属于每个$inputs
的所有$group
数组。
我能做到的一种方法是:
$groups= // array of ParseObjects
$inputs= // array of ParseObjects
foreach ($groups as $group)
{
$inputsInGroup=array();
foreach ($inputs as $input)
{
if($input->get('parent')==$group)
{
array_push($inputsInGroup,$input);
}
}
//here I can use $inputsInGroup which will contain all elements that have this group as their parent
}
这样可行,但接缝效率非常低,因为它必须搜索每个组的整个输入列表,包括它已经确定属于前一组的任何输入。
有没有办法向array_search ()
或sort()
提供一个函数来返回通过此检查的数组中的对象$input->get('parent')==$group
?
我知道你可以用jQuery sort()
做到这一点似乎PHP可能有类似的方法。
答案 0 :(得分:2)
你有一个不需要的嵌套循环 - 这就是
的原因$groups; // array of ParseObjects
$inputs; // array of ParseObjects
$ibg; // inputs by group
foreach($inputs as $input) {
var $group = $input->get('parent')->getObjectId();
if(!isset($ibg[$group])){
$ibg[$group] = array();
}
$ibg[$group][] = $input;
}
答案 1 :(得分:0)
您要求的是将带有自定义回调的过滤器应用于数组,可以使用array_filter
来完成。然而,这种变化本质上只是范式 - 因为渐近复杂性不会有太大变化。
array_filter($groups, function ($group) use ($inputs) {
foreach($inputs as $input) {
if ($input->get('parent') == $group) {
return true;
}
}
});
两者在时间复杂度上仍然是O(n * k)
,但是一种方法使用的是更具功能性的方法,而不是程序方法。