繁体   English   中英

如果条件为真,则PHP foreach重置并删除/减去数组值

[英]PHP foreach reset and remove/subtract array values if condition is true

如果我有以下值,则$ result = 0,$ request = 50和$ array = [25,20],如果$ request值大于$ array,如何将$ request值复位并减去$ array值。 如果条件$ request小于$ array值,或者$ request = 0或$ array values = 0,foreach将中断。

这样的条件和$ result将为5。

50      -    [25, 20]
|___   >=   __|    |
   25      00      |
   |_  >=  ________|
     5    00

码:

while(true) {
    $reset    = false
    $result   = 0;
    foreach($array as $key => $value) {
        if($request >= $value) {
            ....
        } else {
            ....
            $reset = true;
            break;
        }
    }

    if(!$reset) {
        break;
    }
}

$request$result相同,因此是同一件事,因此不需要。

$request = 50;
$array = array(25, 20);

foreach($array as $key => $value) {
    if($request < $value || $request === 0 ) {
      break;
    }

    $request = $request - $value;
}

echo 'Result: '.$request;

测试

$request = 50;

$array = array(25, 20); 
// Result: 5

$array = array(25, 30); 
// Result: 25

$array = array(25, 25); 
// Result: 0

$array = array(51, 10);
// Result: 50

编辑

根据评论和OP小提琴进行编辑。

$request = 50;
$array   = array(20, 25, 25);
$excess = max(array_sum($array) - $request, 0);

foreach($array as $key => $value) {
    if($request < $value || $request === 0 ) {
      $request = 0;
      break;
    }

    $request = $request - $value;
}


echo 'Result: '.$request.'<br />';
echo 'excessValue: '.$excess;

测试

$request = 50;

$array  = array(25, 20);
// Result: 5, excess: 0

$array = array(50, 20);
// Result: 0, excess: 20

$array   = array(52, 5);
// Result: 0, excess: 7

$array   = array(20, 25, 25);
// Result: 0, excess: 20
<?php 
while(true) {
    $reset    = false;
    $result   = 0;
$request = 51;
$array = array(25, 20); 

foreach($array as  $value) {
    if($request>=$value){
        $request=$request-$value;
    }
    else{
    break;
            }
echo 'Result: '.$request;
    }
    if(!$reset) {
        break;
    }
}
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM