我不太确定如何简洁地说出这个问题......而且,我确信这归结为基本的数学失败。无论如何,我的目标是从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
)
有人能指出我出错的地方或者朝着正确的方向推动我吗?
答案 0 :(得分:2)
你想要的是:
$array = array();
for ($x=1;$x<=20;$x++) {
$y = (80-2)/(20-1);
$p = 80-($x-1)*$y;
$array[$x] = $p;
}
说明:
您从80
开始,以2
结束。您的索引从1
转到20
。
这意味着,你有20个元素,但第一个和最后一个是固定的。
所以,你有20-1 = 19“跳跃”(或减法),直到你从80到达2。
每次跳跃都有相同的大小。由于总差值为80-2,因此每次减法的大小应为(80-2)/(20-1)= 78/19。
这就是你应该写
的原因$p = 80-($x-1)*$y;
请注意($x-1)
是因为减法只在第二个元素上开始(你想以80开头)。
答案 1 :(得分: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);