根据PHP中的位置将值相加

时间:2016-01-23 03:45:09

标签: php list math

每个数字都有相应的值。有很多数字我可以在这里用适当的值表示:

[N] [V]      N=Number V=Value
2   19
4   19
6   19
8   21
10  21
12  22
14  23
16  23
18  23
20  33
22  37
24  42
26  45
28  48
30  50
32  55
34  61
36  66
38  72
40  78
42  155
44  179
46  202
48  233
50  360

用户将从数字x到数字y的位置进行处理。这些数字之间的值需要加在​​一起。例如,假设用户从16到38:

[N] [V]      N=Number V=Value
2   19
4   19
6   19
8   21
10  21
12  22
14  23
[16][23]--
18  23   |
20  33   |
22  37   |
24  42   |
26  45   |
28  48   |---- All of these values get added together
30  50   |
32  55   |
34  61   |
36  66   |
[38][72]--
40  78
42  155
44  179
46  202
48  233
50  360

因此用户总值将等于:

 23 + 23 + 33 + 37 + 42 + 45 + 48 + 50 + 55 + 61 + 66 + 72
 Total Value = 555

问题是,我不知道如何将它放在代码中。比如如何将这些值分配给它们的特定数字以及如何将这些特定值添加到一起以获得结果。在PHP中,我根本不知道从哪里开始。

此外,数字的近似值可用下式表示:

 v = 11.218e^(0.057n)

我认为这对于简化整个过程非常有用,但我仍然不确定如何实现所有这些。任何帮助都会非常受欢迎!

3 个答案:

答案 0 :(得分:1)

将每个带有它的数字的相应值放入一个数组中,使数字成为键和值对。

<?php
$arr = array(
  2=>  19,
  4=>  19,
  6=>  19,
  8=>  21,
  10=> 21,
  12=> 22,
  14=> 23,
  16=> 23,
  18=> 23,
  20=> 33,
  22=> 37,
  24=> 42,
  26=> 45,
  28=> 48,
  30=> 50,
  32=> 55,
  34=> 61,
  36=> 66,
  38=> 72,
  40=> 78,
  42=> 155,
  44=> 179,
  46=> 202,
  48=> 233,
  50=> 360,
);
?>

使用foreach循环的循环数组,如下所示

<?php
$sum = 0;
foreach($arr as $k => $v) {
   if($k >= 16 && $k <= 38) 
      $sum += $v;
}
?>

还有另一种使用for循环语句的方法,将两个数字放在两个单独的数组($ n和$ v)中。迭代第一个数组($ n)的循环,并通过第一个数组的索引号从第二个数组($ v)中找到值。但两个阵列计数应该相同。 示例 -

<?php
$n = array(2,4,6,8,10,12,14,16,18,20);
$v = array(19,19,19,21,21,22,23,23,23,33);
$sum = 0;
for($i=0, $i<count($n); $i++) {
   if($n[$i] >= 16 && $n[$i] <= 38)
      $sum += $v[$i];
}
?>

答案 1 :(得分:1)

您可以将数字和值对放入键/值数组中。因此,缩短版的测试数据将如下所示:

$myDataStore = array(
    "2" => "19",
    "4" => "19",
    "6" => "19",
    "8" => "21",
    "10" => "21",
    "12" => "22",
    "14" => "23",
    "16" => "23",
    "18" => "23",
    "20" => "23"
);

现在你需要一个函数来计算你的和,给定一个由开始和结束数字定义的范围。

function getRangeTotal($array, $startNumber, $endNumber){
    $total = 0;
    foreach($array as $key => $value){
        if($key >= $startNumber && $key <= $endNumber){
            $total = $total + $value;
        }
    }
    return $total;
}

如果您运行上述功能

getRangeTotal($myDataStore, 6, 12);

您将获得83

答案 2 :(得分:0)

以下是使用foreach

执行此操作的方法
// first store you data to an array.
$kv = array(
2  => 19, 4  => 19, 6  => 19, 8  => 21,
10 => 21, 12 => 22, 14 => 23, 16 => 23,
18 => 23, 20 => 33, 22 => 37, 24 => 42,
26 => 45, 28 => 48, 30 => 50, 32 => 55,
34 => 61, 36 => 66, 38 => 72, 40 => 78,
42 => 155, 44 => 179, 46 => 202,48 => 233,
50 => 360
);

$start = 16;
$end = 32;
$sum = 0; //variable to keep sum
$n = 0; //variable to keep count
//loop through the array
foreach ($kv as $k => $v){
    if ($k >=$start && $k <= $end){ //if key is in your range
        $sum += $v; //add value to sum
        $n ++; // increment count
    }
}
$v = 11.218*pow(M_E,0.057*$n); //calculate the approximate values
echo "$sum\n$v\n";

另请参阅:powPredefined Constants