数组元素的PHP组合
我想生成所有可能的数组元素组合来填充占位符,占位符的大小可能会有所不同 假设我有数组数组元素的PHP组合,php,arrays,algorithm,combinations,Php,Arrays,Algorithm,Combinations,我想生成所有可能的数组元素组合来填充占位符,占位符的大小可能会有所不同 假设我有数组$a=array(3,2,9,7),占位符大小是6。我想生成如下内容: 3,3,3,3,3,3 2,3,3,3,3,3 2,2,3,3,3,3 ........... ........... 7,7,7,7,7,9 7,7,7,7,7,7 但是,(2,3,3,3,3)将被视为与(3,2,3,3,3,3)相同,因此后者不计算在内 谁能给我指一下正确的方向吗?我知道有Math\u combinationicspea
$a=array(3,2,9,7)
,占位符大小是6
。我想生成如下内容:
3,3,3,3,3,3
2,3,3,3,3,3
2,2,3,3,3,3
...........
...........
7,7,7,7,7,9
7,7,7,7,7,7
但是,(2,3,3,3,3)
将被视为与(3,2,3,3,3,3)
相同,因此后者不计算在内
谁能给我指一下正确的方向吗?我知道有
Math\u combinationics
pear
软件包,但该软件包仅适用于占位符大小我没有PHP源代码可供您使用,但有些源代码可能会有所帮助
一些C代码。请看2.1:
Delphi代码:
维基文章好吧,我花了一些时间才弄明白这一点
所以我把问题分成了多个部分
一,。
我首先制作了一个包含所有可能值选项的数组
function create_all_array($placeholder, array $values)
{
if ($placeholder <= 0) {
return [];
}
$stack = [];
$values = array_unique($values);
foreach ($values as $value) {
$stack[] = [
'first' => $value,
'childs' => create_all_array($placeholder - 1, $values)
];
}
return $stack;
}
三,。
然后困难的部分来了。检查有无重复。这比预期的要难
四,。
最后一步是将intel合并成一个新函数:P
function unique_string($placeholder, array $values)
{
$stack = string(create_all_array($placeholder, $values));
$check_stack = [];
foreach($stack as $key => $item) {
if (has_duplicate($item, $check_stack)) {
unset($stack[$key]);
}
$check_stack[] = $item;
}
return $stack;
}
现在您可以使用它,如下所示
unique_string(3 /* amount of dept */, [1,2,3] /* keys */);
Ps代码基于PHP5.4+,要转换为较低版本,您需要将[]
更改为array()
,但我喜欢新语法,非常抱歉:p这不太符合逻辑,因为某些组合是任意的。新的合并是否合法取决于之前的合并。虽然仍然可行。如果占位符
,怎么办?对不起,我想给出一个答案。从错误的领域开始。@OfirBaruch:我就知道是这样。这确实需要太多的时间。我不会回答。抱歉,没有那么多时间。@nl-x,因为有时占位符可能大于count($a)
function unique_string($placeholder, array $values)
{
$stack = string(create_all_array($placeholder, $values));
$check_stack = [];
foreach($stack as $key => $item) {
if (has_duplicate($item, $check_stack)) {
unset($stack[$key]);
}
$check_stack[] = $item;
}
return $stack;
}
unique_string(3 /* amount of dept */, [1,2,3] /* keys */);