PHP将数组递增1

PHP将数组递增1,php,arrays,increment,Php,Arrays,Increment,我有一个简单的数组$iteration=[0,1,2,3,4],我正在尝试构建一个函数,将其增量到最大值$max=12,例如,我不能对两个键重复使用相同的数字。但到目前为止,我几乎没有成功。这是我现在拥有的 //$iteration is my array and $max is the maximum value a key can have. IncrementIteration($iteration,$max){ $count=count($iteration); whil

我有一个简单的数组
$iteration=[0,1,2,3,4]
,我正在尝试构建一个函数,将其增量到最大值
$max=12
,例如,我不能对两个键重复使用相同的数字。但到目前为止,我几乎没有成功。这是我现在拥有的

//$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;
}
输出:数组([0]=>0[1]=>1[2]=>3)

输出:数组([0]=>1[1]=>2[2]=>3)

输出:数组([0]=>1[1]=>2[2]=>3)

这将是可能的最高增量

print_r(IncrementIteration([10,11,12],12))
输出:数组([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);
}
函数ReverseSUM($value,$array){
全局$调试;
$count=计数($array);
$count=3;
$values=array();
而($count>0){
//While迭代初始化
$iteration=生成操作($count);
//我们迭代
while(SumIteration($iteration,$array)!=value){
if($iteration===IncrementIteration($iteration,(count($array)-1))){
打破
}否则{
$iteration=IncrementIteration($iteration,(count($array)-1));
}
//中途结束迭代
}
//中途结束迭代
if(sumteration($iteration,$array)==$value){
数组推送($value,$iteration);
}
未设置($迭代);
如果($debug){echo”“;};
$count--;
}
返回$value;
}
函数生成操作($number){
$iteration=array();
$count=0;
而($count<$number){
数组推送($iteration,$count);
$count++;
}
返回$iteration;
}
函数增量迭代($iteration,$max){
$count=count($iteration);
而($count>0){
如果(($iteration[($count-1)]<$max)){
$iteration[($count-1)]+;
打破
}
$count--;
}
返回$iteration;
}
函数SumIteration($iteration,$array){
$result=array();
foreach($key作为$iteration){
数组推送($result,$array[$key]);
}
返回数组_和($result);
}

这样的事情可能会有所帮助

  function unique_keys_array($array) {
    $temp_array = array();
    $i = 0;
    $key_array = array();

    foreach($array as $key) {
        if (!in_array($key, $key_array)) {
            $key_array[$i] = $key;
            $temp_array[$i] = $key;
        }
        $i++;
    }
    return $temp_array;
}


print_r(unique_keys_array([1,2,2,3,4,5,6,7,8,8,9,9]));

returns Array
(
    [0] => 1
    [1] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
    [8] => 8
    [10] => 9
)

这是我反向求和的最终代码

function ReverseSUM($value,$array){
    ini_set('max_execution_time', 10);
    if (!function_exists('GenerateIteration')) {
        function GenerateIteration($number){
            global $debug;
            $iteration=array();
            $count = 0;
            while($count < $number){
                $count++;
                array_push($iteration,$count);
            }
            return $iteration;
        }
    }
    if (!function_exists('IncrementIteration')) {
        function IncrementIteration($iteration,$max){
            global $debug;
            $count=count($iteration);
            while($count > 0){
                if( $iteration[($count-1)] < $max ){
                    $iteration[($count-1)]++;
                    if($count != count($iteration)){
                        $count2=$count;
                        while($count2 <= count($iteration)){
                            if($count2 != count($iteration)){
                                // if( ($iteration[$count2] < $max) ){
                                    $iteration[$count2]=($iteration[($count2-1)]+1);
                                // }
                            }
                            $count2++;
                        }
                    }
                    break;
                }
                $max--;
                $count--;
            }
            return $iteration;
        }
    }
    if (!function_exists('SumIteration')) {
        function SumIteration($iteration,$array){
            global $debug;
            $result=array();
            foreach($iteration as $key){
                array_push($result,$array[$key]);
            }
            return array_sum($result);
        }
    }
    $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);
        $count--;
    }
    return $values;
}
函数ReverseSUM($value,$array){
ini设置(“最大执行时间”,10);
如果(!function_存在('GenerateIteration')){
函数生成操作($number){
全局$调试;
$iteration=array();
$count=0;
而($count<$number){
$count++;
数组推送($iteration,$count);
}
返回$iteration;
}
}
如果(!function_存在('IncrementIteration')){
函数增量迭代($iteration,$max){
全局$调试;
$count=count($iteration);
而($count>0){
如果($iteration[($count-1)]<$max){
$iteration[($count-1)]+;
如果($count!=count($iteration)){
$count2=$count;
而(20美元){
//While迭代初始化
$iteration=生成操作($count);
//我们迭代
while(SumIteration($iteration,$array)!=value){
if($iteration===IncrementIteration($iteration,(count($array)-1))){
打破
}否则{
$iteration=IncrementIteration($iteration,(count($array)-1));
}
//中途结束迭代
}
//中途结束迭代
if(sumteration($iteration,$array)==$value){
数组推送($value,$iteration);
}
未设置($迭代);
$count--;
}
返回$value;
}
下面是我显示结果的方式:

<?php foreach($recap as $line => $value){ ?>
    <?php if($line<2){?>
    <table border="1">
        <tr>
            <th colspan="2" style="text-align:left;">Line <?=$line?> - <?=$value?></th>
        </tr>
        <tr>
            <th>Iteration</th>
            <th>Values</th>
        </tr>
        <?php foreach(ReverseSUM($value,$invoice) as $iteration => $values){?>
            <tr>
                <td><?=$iteration?></td>
                <td>
                    <?php foreach($values as $array){?>
                        <?=($array +1)?><br />
                    <?php } ?>
                </td>
            </tr>
        <?php } ?>
    </table>
    <?php } ?>
<?php } ?>

行-
迭代
价值观

$recap数组只包含我们正在搜索的总值,$invoice数组包含所有发票行的总值

GitHub上提供的代码:


Sheers

这有点不清楚。什么是“递增”一个数组应该是什么意思?这个函数应该返回多个结果吗?@Jeto,我不想用太多的代码来保持简单。但基本上,我正在尝试对一个总数进行反向求和,以找到与总数匹配的发票行。所以我的计划是创建可能的迭代,然后使用sum_数组来查看是否它等于我要寻找的总数。然后增加迭代次数并再次测试。@Jeto,我已经编辑了我的问题,也许这会使它更容易理解。感谢示例,但这仍然有点模糊。为什么返回的数组的索引是0、1和3?它们是什么意思?从你之前的评论来看,这似乎是一个令人期待的乐趣Action将使用一个发票行数组和一个总计作为参数,并返回匹配的发票行(其值加起来等于该总计的发票行).但我没有看到任何类似的内容。索引是错误的,我会在我的问题中添加剩余的函数。希望这样做能帮助您理解。是的,这不会增加数组。这只是过滤重复的键。当您说它不会增加数组时,您需要有点清楚。您在说哪个数组关于??我已经编辑了我的问题。很抱歉不够清晰。
  function unique_keys_array($array) {
    $temp_array = array();
    $i = 0;
    $key_array = array();

    foreach($array as $key) {
        if (!in_array($key, $key_array)) {
            $key_array[$i] = $key;
            $temp_array[$i] = $key;
        }
        $i++;
    }
    return $temp_array;
}


print_r(unique_keys_array([1,2,2,3,4,5,6,7,8,8,9,9]));

returns Array
(
    [0] => 1
    [1] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
    [8] => 8
    [10] => 9
)
function ReverseSUM($value,$array){
    ini_set('max_execution_time', 10);
    if (!function_exists('GenerateIteration')) {
        function GenerateIteration($number){
            global $debug;
            $iteration=array();
            $count = 0;
            while($count < $number){
                $count++;
                array_push($iteration,$count);
            }
            return $iteration;
        }
    }
    if (!function_exists('IncrementIteration')) {
        function IncrementIteration($iteration,$max){
            global $debug;
            $count=count($iteration);
            while($count > 0){
                if( $iteration[($count-1)] < $max ){
                    $iteration[($count-1)]++;
                    if($count != count($iteration)){
                        $count2=$count;
                        while($count2 <= count($iteration)){
                            if($count2 != count($iteration)){
                                // if( ($iteration[$count2] < $max) ){
                                    $iteration[$count2]=($iteration[($count2-1)]+1);
                                // }
                            }
                            $count2++;
                        }
                    }
                    break;
                }
                $max--;
                $count--;
            }
            return $iteration;
        }
    }
    if (!function_exists('SumIteration')) {
        function SumIteration($iteration,$array){
            global $debug;
            $result=array();
            foreach($iteration as $key){
                array_push($result,$array[$key]);
            }
            return array_sum($result);
        }
    }
    $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);
        $count--;
    }
    return $values;
}
<?php foreach($recap as $line => $value){ ?>
    <?php if($line<2){?>
    <table border="1">
        <tr>
            <th colspan="2" style="text-align:left;">Line <?=$line?> - <?=$value?></th>
        </tr>
        <tr>
            <th>Iteration</th>
            <th>Values</th>
        </tr>
        <?php foreach(ReverseSUM($value,$invoice) as $iteration => $values){?>
            <tr>
                <td><?=$iteration?></td>
                <td>
                    <?php foreach($values as $array){?>
                        <?=($array +1)?><br />
                    <?php } ?>
                </td>
            </tr>
        <?php } ?>
    </table>
    <?php } ?>
<?php } ?>