我有一个值数组[20,40,30,50],我有另一个值为30的变量。
我需要从第一个元素中减去30。 如果$ var更大,则需要删除第一个元素并从数组中的下一个元素中减去剩余值。
实施例: $ arr = array(20,40,30,50); $ var = 30;
结果数组应为(30,30,50)
谢谢
答案 0 :(得分:0)
循环数组并相应地减去和/或取消设置值。
export const UPDATE_AD_SLOTS_REQUEST = 'UPDATE_AD_SLOTS_REQUEST';
export const UPDATE_AD_SLOTS_SUCCESS = 'UPDATE_AD_SLOTS_SUCCESS';
export const UPDATE_AD_SLOTS_ERROR = 'UPDATE_AD_SLOTS_ERROR';
export function updateAdslotsRequest(){
return {
type: UPDATE_AD_SLOTS_REQUEST
}
}
export function updateAdslotsSuccess(data){
return {
type: UPDATE_AD_SLOTS_SUCCESS,
data: data
}
}
export function updateAdslotsError(errors){
return {
type: UPDATE_AD_SLOTS_ERROR,
erros: errors
}
}
export function updateAdslots(data, id) {
return dispatch => {
dispatch(updateAdslotsRequest());
return axios.patch(`http://192.168.99.100:8080/adslots/${id}`, data)
.then(res => {
dispatch(updateAdslotsSuccess(res.data));
})
.catch(errors => {
dispatch(updateAdslotsError(errors));
})
}
}
你也可以添加这一行$arr = [20,40,30,50];
$var =30;
Foreach($arr as $key => &$val){
If($var > $val){
$var -= $val;
Unset($arr[$key]);
}Else{
$val -= $var;
$var = 0;
}
}
Unset($val);
Var_dump($arr);
,看看当循环结束时$ var中是否有任何重新加载。
https://3v4l.org/LU2Tf
更新了包含$ var = 0;
的链接答案 1 :(得分:0)
如果我没有弄错的话,如果项目减去$var
低于零,你想从数组中删除该项目。然后继续使用其余数组项的剩余值。
试试这样:
$values = [20,40,30,50];
$var = 30;
foreach ($values as $key => &$value) {
if ($value - $var > 0) {
$value -= $var;
// There is nothing more to subtract so break.
break;
}
unset($values[$key]);
// Turn the var into a positive value so we can continue
$var = -1 * ($value - $var);
}
print_r($values);
答案 2 :(得分:-2)
传入递归!
function array_sub($arr, $sub) {
if(count($arr) <= 0) {
return array();
}
$arr[0] -= $sub;
if($arr[0] > 0) {
return $arr;
}
else {
$sub = array_shift($arr) * (-1);
return array_sub($arr, $sub);
}
}
$arr = array(20,40,30,50);
$sub = 30;
$arr = array_sub($arr, $sub);
print_r($arr);
输出:
Array ( [0] => 30 [1] => 30 [2] => 50 )