我正在尝试编写一个可以生成数组的可能组合的函数。
示例:
$a = array('0', '1', '2');
// wanted results
// 0
// 1
// 2
// 0 0
// 0 1
// 0 2
// 1 0
// 1 1
// 1 2
// 2 0
// 2 1
// 2 2 and so on..
我想一次只获得一个组合,而不是将它们全部组合成一个数组。
类似的东西:
getCombination(); // 0
getCombination(); // 1
getCombination(); // 2
getCombination(); // 0 0 and so on...
我的代码看起来像这样(但它没有按预期工作):
$val = array('0', '1', '2');
$now = array();
$t = 0;
$c = 0;
$v = 0;
$x = array();
function inc()
{
global $val, $now, $t, $c, $v, $x;
if(count($x) <> $c)
{
for($i = -1; ++$i < $c + 1;)
{
$x[$i] = 0;
$now[$i] = $val[0];
}
}
$now[$v] = $val[$t];
if($t + 1 >= count($val))
{
if($c)
{
if($v >= $c)
{
$v = 0;
++$c;
}
else
{
++$v;
}
}
else
{
++$c;
}
$t = 0;
}
else
{
++$t;
}
echo implode(' ', $now), '<br>';
}
for($i = 0; $i < 150; $i++)
{
inc();
}
我需要了解如何为此构建工作函数或类。
答案 0 :(得分:0)
如果知道如何获得所有可能的组合,那么您可以使用以下代码来获取每次新值:
function get()
{
static $combinations=array();
static $current=-1;
static $total=-1;
if($total==-1)
{
$combinations=array('1', '2', '12', '21'); // or get them in any other way
$total=count($combinations);
}
return $combinations[(++$current)%$total];
}
//and testing.
for($i=0; $i<14; $i++)
{
echo get();
}
我希望这会有所帮助
答案 1 :(得分:0)
这是我的解决方案(希望它能帮到某人):
<?php
$val = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
$now = array();
$max_size = 5;
for($i = 0; $i < $max_size; ++$i)
{
$now[$i] = 0;
}
function getCombination()
{
global $now, $val;
$l = count($val);
$t = 1;
foreach($now as $k => &$v)
{
$v += $t;
if($v <= $l)
{
$t = 0;
}
else
{
$v -= $l;
$t = 1;
}
}
$ar = array();
foreach($now as $k => $v)
{
$ar[$k] = $val[$v - 1];
}
echo strrev(implode(' ', $ar)), '<br>';
}
// test
for($i = 0; $i < 800; $i++)
{
getCombination();
}