我有这个数组:
$products = array('0', '1', '2', '3');
我想要这个组合:
0
0,1
0,1,2
0,1,2,3 // my code can't show this result
0,1,3 // my code can't show this result
0,2
0,2,3
0,3
1
1,2
1,2,3
1,3
2
2,3
3
这是我的代码:
$rows = count($products);
for ($i = 0; $i < $rows; $i++) {
echo $i . '<br>';
for ($j = $i + 1; $j < $rows; $j++){
echo $i . $j . '<br>';
if (!empty($products[$j+1])) {
echo $i . $j . $products[$j+1] . '<br>';
}
}
}
但是,遗憾的是我错过了2个结果:
0,1,2,3
0,1,3
我仍然怀疑这个for
循环内部循环,而组合的数量由数组长度决定。
如何获得错过的组合并完美适用于不同的阵列长度?
答案 0 :(得分:2)
$products = array('0', '1', '2', '3');
$rows = count($products); //missing here array count......
for ($i = 0; $i < $rows; $i++) {
echo $i . '<br>';
for ($j = $i + 1; $j < $rows; $j++){
echo $i . $j . '<br>';
if (!empty($products[$j+1])) {
echo $i . $j . $products[$j+1] . '<br>';
}
}
}
答案 1 :(得分:2)
试试这个
<?php
$set = array('0', '1', '2','3');
$power_set = possible_set($set);
echo "<pre>";
print_r($power_set);
echo "</pre>";
function possible_set($array) {
$results = array(array( ));
foreach ($array as $element)
foreach ($results as $inner_element)
array_push($results, array_merge(array($element), $inner_element));
unset($results[0]);
$results = array_values($results);
return $results;
}
?>