Как вычесть число из значений массива с помощью php?


У меня есть этот массив.

$val = array(1, 0, 2, 1, 1);

Я хочу вычесть 3.5 из массива $val таким образом, чтобы из каждого элемента этот элемент не становился отрицательным, как это:

$val = array(0, 0, 0, 0.5, 1)
Author: Mohammad, 2017-02-17

2 answers

Повторите элементы массива и в цикле проверьте, велико ли целевое значение этого элемента цикла, вычтите значение элемента из целевого значения. Если элемент цикла больше целевого значения, вычтите целевое значение из элемента цикла.

$val = array(1, 0, 2, 1, 1);
$subtract = 3.5;
foreach ($val as $key => $item){
    if ($subtract >= $item){
        $subtract -= $item; 
        $val[$key] = 0;
    } else {
        $val[$key] -= $subtract;
        $subtract = 0;
    }
}

Смотрите результат в демо

 4
Author: Mohammad, 2017-02-17 20:21:43

Еще один возможный подход: уменьшите значение вычитания на значение текущей итерации, затем установите текущее значение либо равным нулю, либо -$subtract. Перерыв, когда $subtract опускается ниже нуля.

foreach ($val as &$number) {
    $subtract -= $number;
    $number = ($subtract > 0) ? 0 : -$subtract;
    if ($subtract <= 0) break;
}
 2
Author: Don't Panic, 2017-02-17 20:48:34