If I have following value, $result = 0, $request = 50 and $array = [25, 20], How do I reset and subtract $request value to $array values if $request value is greater than $array. and foreach will break if condition are $request less than $array value or, $request = 0 or, $array values = 0.
So condition like this and $result will be 5.
50 - [25, 20] |___ >= __| | 25 00 | |_ >= ________| 5 00
code:
while(true) {
$reset = false
$result = 0;
foreach($array as $key => $value) {
if($request >= $value) {
....
} else {
....
$reset = true;
break;
}
}
if(!$reset) {
break;
}
}
$request
will be same as $result
, so it's the same thing and therefore not needed.
$request = 50;
$array = array(25, 20);
foreach($array as $key => $value) {
if($request < $value || $request === 0 ) {
break;
}
$request = $request - $value;
}
echo 'Result: '.$request;
TESTS
$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
EDIT
Edit based on comments and OP fiddle.
$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;
TESTS
$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;
}
}
?>