首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按顺序递归地从组数组中检索所有可能的组合。数组大小和组大小为1-X,其中X不是大数

按顺序递归地从组数组中检索所有可能的组合。数组大小和组大小为1-X,其中X不是大数
EN

Stack Overflow用户
提问于 2020-10-29 09:19:25
回答 1查看 27关注 0票数 0

我需要以递归方式获得所有排列,按组的数组顺序排列。

所以数组看起来像这样:(8,2,5,7,9,3,2)

程序会把一个字符串放在一起,看起来像这样(添加管道只是为了美观):

8、5、3| 8、5、2 | 8、7、3| 8、7、2 | 8、9、3| 8、9、2|2、5、3|2、5、2|等等...

输出将在使用所有3个组的最后一次组合时结束。同样,组的数量可以改变,每个组中的元素的数量也可以改变。我在php中使用了下面的方法。(是的,我正在尝试动态构建一个复杂的sql视图,但忽略无关的东西。ViewGroups是组的数组,viewstring是我最后需要的输出。其余的都符合上面描述的参数。请忽略注释掉的代码行。当我问这个问题时,我正在做这件事!):

代码语言:javascript
复制
   private function recSelect(array $viewGroups, string $viewString)
{
    if (count($viewGroups) == 0) {
        return " AND " . $this->buildWhere();
    } elseif (count($viewGroups) == $this->vgCount) {
        foreach ($viewGroups[0] as $el) {
            $viewString .= "Select * from patients where " . $el->getWhereClause();
            $viewString .= $this->recSelect(array_slice($viewGroups, 1), $viewString) . ' UNION ';
            //return $this->recSelect(array_slice($viewGroups, 1), $viewString) . ' UNION ';
        }
    } else {
        foreach ($viewGroups[0] as $el) {
            return " AND " . $el->getWhereClause() . $this->recSelect(array_slice($viewGroups, 1), $viewString);;
            //$viewString .= $this->recSelect(array_slice($viewGroups, 1), $viewString);
            //return;
            //return $this->recSelect(array_slice($viewGroups, 1), $viewString);
        }
    }
    return $viewString;
}

我们非常感谢您的任何建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-30 08:27:34

jibsteroos的第二条评论完美地回答了这个问题。不知道为什么你们会把潜在的答案发布为评论。但我对这些东西还是新手。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64583588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档