假设我的范围在0到100之间,我希望返回的数组包含3个整数,这些整数均匀分布在该范围内,最好的方法是什么?
例如:
范围:0-100
通缉:3
退回:25,50,75
答案 0 :(得分:3)
你可以使用array_chunk(),例如
$end=100;
$a = range(0,$end);
$chunk=3;
foreach (array_chunk($a,$end/($chunk+1)) as $s){
print $s[0]."\n";
}
输出
$ php test.php
0
25
50
75
100
如果不需要,你可以摆脱开始(0)和结束(100)点。
答案 1 :(得分:3)
伪代码:
function foo(int rangeLow, int rangeHigh, int wanted)
int increment=(rangeHigh-rangeLow)/(wanted+1)
array r=new array()
for (int i=rangeLow+increment;i<rangeHigh;i+=increment)
r.push(i)
return r
编辑:错过了php标签......
//tested:
function foo($wanted=3, $rangeLow=0, $rangeHigh=100){
$increment=($rangeHigh-$rangeLow)/($wanted+1);
$r=array();
for ($i=$rangeLow+$increment;$i<$rangeHigh;$i+=$increment)
$r[]=$i;
return $r;
}
/*
examples:
call:
foo ();
returned:
[0] => 25
[1] => 50
[2] => 75
call:
foo (4);
returned:
[0] => 20
[1] => 40
[2] => 60
[3] => 80
call:
foo (5,50,200);
returned:
[0] => 75
[1] => 100
[2] => 125
[3] => 150
[4] => 175
*/
答案 2 :(得分:3)
这是一个groovy中的解决方案,可以提供您想要的答案,您应该可以将其切换为您正在使用的任何语言:
def distributedValues(min, max, wanted) {
def incrementBy = (max - min)/(wanted + 1)
(1..wanted).collect { count -> min + (count * incrementBy) }
}
assert distributedValues(0, 100, 1) == [50]
assert distributedValues(0, 100, 3) == [25, 50, 75]
assert distributedValues(0, 100, 4) == [20, 40, 60, 80]
assert distributedValues(0, 100, 5) == [16.6666666667, 33.3333333334, 50.0000000001, 66.6666666668, 83.3333333335]
assert distributedValues(100, 200, 3) == [125, 150, 175]
答案 3 :(得分:1)
您可以使用rand函数获取特定范围之间的随机值。 使用此代码。以下函数将返回数组中的元素集
function array_elements( $start = 0 , $end = 100 , $element =5 )
{
$myarray = array () ;
for ( $i = 0 ; $i < $element;$i++ )
{
$myarray[$i]= rand ( $start, $end );
}
return $myarray ;
}
print_r ( array_elements() ) ;