2

我不太确定如何简洁地表达这个问题......而且,我确信这归结为基本的数学失败。无论如何,我的目标是从 1 计数到 20,然后为计数分配一个递减的值,从 80 开始到 2 结束。

所以基本上,

$array = (
  1 => 80,
  ..
  20 => 2
);

这是我想出的代码,它看起来很接近但它关闭了,我不知道为什么:(

$array = array();
for( $x = 1; $x <= 20; $x++ ) {
  $y = ( 80 - 2 ) / 20;
  $p = ( 80 - ( $x * $y ) ) + ( $y / $x );
  $array[$x] = $p;
}
echo "<pre>";
print_r($array);
echo "</pre>";

这给了我:

Array
(
    [1] => 80
    [2] => 74.15
    [3] => 69.6
    [4] => 65.375
    [5] => 61.28
    [6] => 57.25
    [7] => 53.2571428571
    [8] => 49.2875
    [9] => 45.3333333333
    [10] => 41.39
    [11] => 37.4545454545
    [12] => 33.525
    [13] => 29.6
    [14] => 25.6785714286
    [15] => 21.76
    [16] => 17.84375
    [17] => 13.9294117647
    [18] => 10.0166666667
    [19] => 6.10526315789
    [20] => 2.195
)

有人可以指出我哪里出错了或将我推向正确的方向吗?

4

2 回答 2

2

你想要的是:

$array = array();
for ($x=1;$x<=20;$x++) {
  $y = (80-2)/(20-1);
  $p = 80-($x-1)*$y;
  $array[$x] = $p;
}

说明:您以 . 开头80和结尾2。您的索引从120。这意味着,您有 20 个元素,但第一个和最后一个是固定的。因此,您有 20-1 = 19 次“跳跃”(或减法),直到您从 80 次中达到 2。每次跳跃的大小相同。由于总差值为 80-2,因此每个减法的大小应为 (80-2)/(20-1) = 78/19。

这就是为什么你应该写

$p = 80-($x-1)*$y;

请注意,这($x-1)是由于减法仅从第二个元素开始(您希望从 80 开始)。

于 2013-09-04T02:06:36.447 回答
2

您的问题主要出在这一行:

$y = ( 80 - 2 ) / 20;

虽然有 20 个值,但只有 19 个实例需要减去。这是我的鸡抓痕,与其他答案相同,主要是:

$array = array();
for ( $x=1; $x <= 20; $x++ ) 
{
  $y = (80 - 2) / 19;
  $p = 80 - ($y * ($x - 1));
  $array[$x] = $p;
}

print_r($array);
于 2013-09-04T02:11:09.890 回答