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