PHP数组删除元素或减去

时间:2018-05-26 08:38:01

标签: php arrays

我有一个值数组[20,40,30,50],我有另一个值为30的变量。

我需要从第一个元素中减去30。 如果$ var更大,则需要删除第一个元素并从数组中的下一个元素中减去剩余值。

实施例: $ arr = array(20,40,30,50); $ var = 30;

结果数组应为(30,30,50)

谢谢

3 个答案:

答案 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));
      })
  }
}

https://3v4l.org/vJN2o

你也可以添加这一行$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);

Demo with 30

Demo with 5

答案 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 )