0

我必须在 PHP 中实现一个算法,但我被卡住了。

我有下表:http ://cl.ly/image/1Z0K1g0z2c3y

对于每次迭代,(S)值计算如下:

S1 = V1 - P1

S2 = (V1 - P1) + (V2 - P2)

S3 = (V1 - P1) + (V2 - P2) + (V3 - P3)

等等。

我的值数组如下所示:

Array
(
    [0] => Array
        (            
            [v] => 131.44            
            [p] => 
        )

    [1] => Array
        (
            [v] => 155.00
            [p] => 
        )

    [2] => Array
        (
            [v] => 168.64
            [p] => 
        )

    [3] => Array
        (
            [v] => 131.44
            [p] => 131.44
        )

    [4] => Array
        (
            [v] => 280.00
            [p] => 280.00
        )

    [5] => Array
        (
            [v] => 117.80
            [p] => 117.80
        )

    [6] => Array
        (
            [v] => 70.68
            [p] => 70.68
        )

    [7] => Array
        (            
            [v] => 58.90
            [p] => 58.90        
)

是否可以使用 for() 循环计算每次迭代的总和?

4

1 回答 1

1

编辑:

假设您更新到的数组名为 $table:

// $S is array for S where sums are stored
$S = array();
$S[0] = $table[0][v] - $table[0][p]; // Perform the first row
for ($i=1; $i< count($table); $i++) { // Start at 2nd and continue on
  $S[$i] = $S[($i-1)] + ($table[$i][v] - $table[$i][p]);
}

现在所有的 $S 值都是这样填充的。如果要添加到表中:

$table[0][s] = $table[0][v] - $table[0][p]; // Perform the first row
for ($i=1; $i< count($table); $i++) { // Start at 2nd and continue on
  $table[$i][s] = $table[$i-1][s] + ($table[$i][v] - $table[$i][p]);
}

是的,你可以,考虑到你想要 1、2、3 的 S 值……那么是的。我假设 V 是一个数组,而 P 是一个数组,所以你必须相应地改变,因为每个 S 都可以基于前一个,我保留一个 running_sum 值,这样我们就不必遍历 V 的先前值和P,我们只使用 S 的最后一个值:

// $V is array for V and $P is array for P and 
// $S is array for S where sums are stored
if (count($V) == count($P)) { // Check both V and P are same length
  $running_sum = 0;
  for ($i=0; $i< count($V); $i++) {
    $running_sum += ($V[$i] - $P[$i]);
    $S[$i] = $running_sum;
  }
}

虽然我们真的不需要运行总和变量,但我用它来使逻辑清晰,这里没有它:

// $V is array for V and $P is array for P and 
// $S is array for S where sums are stored
if (count($V) == count($P)) { // Check both V and P are same length
  $S[0] = $V[0] - $P[0]; // Perform the first row
  for ($i=1; $i< count($V); $i++) { // Start at 2nd and continue on
    $S[$i] = $S[($i-1)] + ($V[$i] - $P[$i]);
  }
}
于 2013-02-23T18:55:16.017 回答