Комбинации от уникални елементи от масив

raiden

Registered
Целта беше от 1 масив с 9 стойности да се изведат всички комбинации с по 6 стойности като нито 1 стойност не се повтаря в комбинацията
И понеже ме поизмъчи работата реших да го споделя ако на някой му се наложи да прави нещо подобно :roll:
<?php
$arr = array('1', '2', '3', '4', '5', '6', '7', '8', '9');
$combinations = array();
$i = 0;
foreach($arr as $a) {
foreach($arr as $b) {
if($b == $a) { break 1; }
foreach($arr as $c) {
if($c == $a || $c == $b) { break 1; }
foreach($arr as $d) {
if($d == $a || $d == $b || $d == $c) { break 1; }
foreach($arr as $e) {
if($e == $a || $e == $b || $e == $c || $e == $d) { break 1; }
foreach($arr as $f) {
if($f == $a || $f == $b || $f == $c || $f == $d || $f == $e) { break 1; }
$i += 1;
$combinations[] = "$a $b $c $d $e $f"; }}}}}}
echo "Комбинации: ".$i."<br>";
// За малко прегледност
$end = array();
foreach($combinations as $string) {
$end[] = strrev($string); }
asort($end);
foreach($end as $comb) {
echo $comb."<br>"; }
?>

ПС: Ако някой знае по-лесен начин може да сподели :?:
 
Мисля, че си изпуснал 1 } :
<?php
$arr = array('1', '2', '3', '4', '5', '6', '7', '8', '9');
$combinations = array();
$i = 0;
foreach($arr as $a) {
foreach($arr as $b) {
if($b == $a) { break 1; }
foreach($arr as $c) {
if($c == $a || $c == $b) { break 1; }
foreach($arr as $d) {
if($d == $a || $d == $b || $d == $c) { break 1; }
foreach($arr as $e) {
if($e == $a || $e == $b || $e == $c || $e == $d) { break 1; }
foreach($arr as $f) {
if($f == $a || $f == $b || $f == $c || $f == $d || $f == $e) { break 1; }
$i += 1;
$combinations[] = "$a $b $c $d $e $f"; }}}}}
echo "Комбинации: ".$i."<br>";
// За малко прегледност
$end = array();
foreach($combinations as $string) {
$end[] = strrev($string); }
asort($end);
foreach($end as $comb) {
echo $comb."<br>"; }
}

?>
 
<?php
$arr = array('1', '2', '3', '4', '5', '6', '7', '8', '9');
$combinations = array();
$i = 0;
foreach($arr as $a) {
foreach($arr as $b) {
if($b == $a) { break 1; }
foreach($arr as $c) {
if($c == $a || $c == $b) { break 1; }
foreach($arr as $d) {
if($d == $a || $d == $b || $d == $c) { break 1; }
foreach($arr as $e) {
if($e == $a || $e == $b || $e == $c || $e == $d) { break 1; }
foreach($arr as $f) {
if($f == $a || $f == $b || $f == $c || $f == $d || $f == $e) { break 1; }
$i += 1;
$combinations[] = "$a $b $c $d $e $f"; }}}}}
}

echo "Комбинации: ".$i."<br>";
// За малко прегледност
$end = array();
foreach($combinations as $string) {
$end[] = strrev($string); }
asort($end);
foreach($end as $comb) {
echo $comb."<br>"; }
?>

По-скоро тук, може като съм трил коментарите да съм я помел
 
raiden каза:
<?php
$arr = array('1', '2', '3', '4', '5', '6', '7', '8', '9');
$combinations = array();
$i = 0;
foreach($arr as $a) {
foreach($arr as $b) {
if($b == $a) { break 1; }
foreach($arr as $c) {
if($c == $a || $c == $b) { break 1; }
foreach($arr as $d) {
if($d == $a || $d == $b || $d == $c) { break 1; }
foreach($arr as $e) {
if($e == $a || $e == $b || $e == $c || $e == $d) { break 1; }
foreach($arr as $f) {
if($f == $a || $f == $b || $f == $c || $f == $d || $f == $e) { break 1; }
$i += 1;
$combinations[] = "$a $b $c $d $e $f"; }}}}}
}

echo "Комбинации: ".$i."<br>";
// За малко прегледност
$end = array();
foreach($combinations as $string) {
$end[] = strrev($string); }
asort($end);
foreach($end as $comb) {
echo $comb."<br>"; }
?>

По-скоро тук, може като съм трил коментарите да съм я помел
Ахам, значи не съм улучил къде се намира } :D
Просто не гледах кода обстойно и като я сложих най-отдолу видях, че се оправи :D
 

Горе