如何求和同时减少(交替)在数组中或PHP中的重复


how summing while reducing (alternating) in the array or repetition in PHP

例如:

$a=1+2-3+4-5+6

$result = 0;
for($i=1; $i<=6; $i++) {
   $result += $i;
}

只是添加它。有交替运行的方法吗?

只需添加一个乘法器,该乘法器在每次迭代时都会更改其符号:

$result = 1;
$sign = 1;
for($i=2; $i<=6; $i++) {
   $result += $i * $sign;
   $sign *= -1;
}

注意:我还将迭代更改为以2开头,因为这两个成员都以正号开头:+1+2

您可以创建一个公式(使用凝视方法)并避免循环。

例如

// $a = 1 + 2 - 3 + 4 - 5 + 6;
$n = 6;
echo ceil ($n / 2) * ($n % 2 ? -1 : 1) + 2; // 5

但如果你需要其他序列

// $a = 1 - 2 + 3 - 4 + 5 - 6;
echo ceil ($n / 2) * ($n % 2 ? 1 : -1); // -3

但榜样变了。

$values = [10, 45, 6, 11, 8];
// 1
$result = 0;
reset($values);
while (key($values) !== null)
    {
    $result += current($values) - next($values);
    next($values);
    }
var_dump($result);
// 2    
var_dump(
    array_sum(
        array_column(array_chunk($values, 2), 0)) - array_sum(array_column(array_chunk($values, 2), 1)));
// 3
var_dump(
    array_reduce(array_chunk($values, 2), function ($result, $item)
        {
        return $result + current($item) - next($item);
        }));
// 4
$result = 0;
$i = 1;
foreach ($values as $value)
    {
    $result += ($i++ % 2? : -1) * $value;
    }
var_dump($result);