سؤال
وأريد أن تولد كل مجموعة من طول ص من مجموعة [0 ... (ن 1)]
وهكذا خرج ينبغي أن يكون مثل هذا (ن = 6 ص = 2)
$res = array(array(0,1),array(0,2),array(0,3),array(0,4),array(0,5),array(1,2),array(1,3),array(1,4),array(1,5),array(2,3),array(2,4),array(2,5),array(3,4),array(3,5),array(4,5));
ومع وظيفة مثل
function permutate($select, $max)
وحيث $ = حدد ص و$ الحد الأقصى = ن
وهذا هو بلدي محاولة الحالية، ولكن ذهني لا يبدو أن يعمل هذا المساء، وأنها لا تعمل إلا ل$ حدد = 2
function permutate($select, $max)
{
$out = array();
for( $i = 0; $i < ($max) ; $i++)
{
for ($x = ($i + 1); $x < ($max); $x++)
{
$temp = array($i);
for($l = 0; $l < ($select-1); $l++)
{
if(($x+$l) < $max )
{
array_push($temp, $x+$l);
}
}
if(count($temp) == $select)
{
array_push($out, $temp);
}
}
}
return $out;
}
وشكرا مقدما
المحلول
ومنذ كنت في حاجة الى عدد غير محدد من الحلقات، وسوف تحتاج إلى أن تفعل ذلك بشكل متكرر:
function permutation($select, $max) {
if ($select === 1) {
$result = range(0, $max);
foreach ($result as &$entry) {
$entry = array($entry);
}
return $result;
}
$result = array();
$previous = permutation($select - 1, $max - 1);
foreach ($previous as $entry) {
$last = end($entry);
for ($i = $last + 1; $i <= $max; $i++) {
$result[] = array_merge($entry, array($i));
}
}
return $result;
}
لا تنتمي إلى StackOverflow