PHP输出所有可能的数字组合

时间:2016-03-24 13:33:51

标签: php arrays

好的,我差不多完成了我的脚本,但是我的输出并不像预期的那样。脚本任务是从所有多维数组键的总和创建所有可能的数字组合。我编辑了很少的脚本,并在一个脚本中合并,但我似乎无法获得所需的输出。

好的,例如,假设我有这样的数组:

$test = array(0 => array(53, 22, 12),
    1 => array(94, 84, 94),
    2 => array(56, 45, 104)
);

然后我获取数组键并将它们存储在新数组中:

foreach ($test as $key => $row) {
    $output[] = count($row);          
}                                       
for($keycount = 1; $keycount <= count($output); $keycount++){
    $newarray[$keycount] = $keycount;
}

然后我从新创建的数组中计算键,因此最终组合基于该数字。在前面提到的例子中,我有3种组合,所以最终的数组应该是这样的:

111
211
311
121
221
321
131
231
331
112
.
.
.
333

但是用我的剧本:

$arraycount = count($newarray);
$maxcombinations = pow($arraycount, $arraycount);
$return = array();
$conversion = array();
foreach ($newarray as $key => $value) {
    $conversion[] = $key;
}
for ($i = 0; $i < $maxcombinations; $i++) {
    $combination = base_convert($i, 10, $arraycount);
    $combination = str_pad($combination, $arraycount, "0", STR_PAD_BOTH);
    $return[$i][] = substr(strtr($combination, $conversion), 1, $arraycount);
}     
echo "<pre>".print_r($return, true)."</pre>";

我得到这样的输出:

Array
(
[0] => Array
    (
        [0] => 111
    )

[1] => Array
    (
        [0] => 121
    )

[2] => Array
    (
        [0] => 131
    )

[3] => Array
    (
        [0] => 211
    )

[4] => Array
    (
        [0] => 221
    )

[5] => Array
    (
        [0] => 231
    )

[6] => Array
    (
        [0] => 311
    )

1 个答案:

答案 0 :(得分:0)

你正在使用像$ return [$ i] []这样的数组,因此你的输出是意外的

尝试

$return[$i] = substr(strtr($combination, $conversion), 1, $arraycount);

而不是

$return[$i][] = substr(strtr($combination, $conversion), 1, $arraycount);