为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 将数组递增 1

PHP 将数组递增 1

PHP
当年话下 2022-09-03 16:02:33
我有一个简单的数组,我正在尝试构建一个函数以将其递增到例如最大值,并且我无法对2个键重用相同的数字。但到目前为止,我几乎没有取得什么成功。这就是我现在所拥有的。$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;}但这绝不会重置递增的键后面的键,并且不会考虑该数字是否已使用。以下是我正在寻找的结果示例:print_r(IncrementIteration([0,1,2],12))输出:数组 ( [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))输出:数组 ( [0] => 10 [1] => 11 [2] => 12 )感谢您对此代码的任何帮助。
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

也许像这样的事情可以有所帮助,


  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

)


查看完整回答
反对 回复 2022-09-03
?
忽然笑

TA贡献1806条经验 获得超5个赞

Here is my final code for my Reverse Sum


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;

}

And here is how I display the results:


<?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 } ?>

The $recap array simply contains the total values we are searching for. And the $invoice array contains all the invoice lines totals.


Code available on GitHub : https://github.com/LouisOuellet/ReverseSUM


Sheers


查看完整回答
反对 回复 2022-09-03
  • 2 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信