我需要以递归方式获得所有排列,按组的数组顺序排列。
所以数组看起来像这样:(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是我最后需要的输出。其余的都符合上面描述的参数。请忽略注释掉的代码行。当我问这个问题时,我正在做这件事!):
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;
}我们非常感谢您的任何建议!
发布于 2020-10-30 08:27:34
jibsteroos的第二条评论完美地回答了这个问题。不知道为什么你们会把潜在的答案发布为评论。但我对这些东西还是新手。
https://stackoverflow.com/questions/64583588
复制相似问题