У меня есть простой массив $iteration=[0,1,2,3,4]
, и я пытаюсь создать функцию, например, чтобы увеличить его до максимального значения $max=12
, и я не могу повторно использовать одно и то же число для 2 клавиш. Но пока у меня очень мало успеха. Вот что у меня сейчас.
//$iteration is my array and $max is the maximum value a key can have.
IncrementIteration($iteration,$max){
$count=count($iteration);
while($count > 0){
if( ($iteration[($count-1)] < $max) ){
$iteration[($count-1)]++;
break;
}
$count--;
}
return $iteration;
}
Но это никогда не сбрасывает ключи, следующие за инкрементной клавишей, и не учитывает, использовался ли уже номер.
Вот то, что я ищу в качестве примера результатов:
print_r(IncrementIteration([0,1,2],12))
Выход: Array ([0] => 0 [1] => 1 [ 2] => 3)
print_r(IncrementIteration([0,1,12],12))
Выход: Массив ([0] => 1 [1] => 2 [2] => 3)
print_r(IncrementIteration([0,11,12],12))
Выход: Массив ([0] => 1 [1] => 2 [2] => 3)
Это будет максимально возможное увеличение.
print_r(IncrementIteration([10,11,12],12))
Вывод: Array ([0] => 10 [1] => 11 [2] => 12)
Спасибо за любую помощь по этому коду.
Я добавляю другие функции, чтобы лучше понять назначение этой функции.
function ReverseSUM($value,$array){
global $debug;
$count=count($array);
$count=3;
$values=array();
while($count > 0){
//Init of While Iteration
$iteration=GenerateIteration($count);
//We iterate
while(SumIteration($iteration,$array) != $value){
if($iteration === IncrementIteration($iteration,(count($array)-1))){
break;
} else {
$iteration=IncrementIteration($iteration,(count($array)-1));
}
//End of While Iteration
}
//End of While Iteration
if(SumIteration($iteration,$array) == $value){
array_push($values,$iteration);
}
unset($iteration);
if($debug){echo "</div>";};
$count--;
}
return $values;
}
function GenerateIteration($number){
$iteration=array();
$count = 0;
while($count < $number){
array_push($iteration,$count);
$count++;
}
return $iteration;
}
function IncrementIteration($iteration,$max){
$count=count($iteration);
while($count > 0){
if( ($iteration[($count-1)] < $max) ){
$iteration[($count-1)]++;
break;
}
$count--;
}
return $iteration;
}
function SumIteration($iteration,$array){
$result=array();
foreach($iteration as $key){
array_push($result,$array[$key]);
}
return array_sum($result);
}