我有一个包含950个元素的数组。元素的值在80-110之间。我想计算80-90、90-100和100-110之间的数量。然后,我将它们显示在图表上。这有可能计算php中的类似元素吗?
答案 0 :(得分:2)
您可以简单地通过运行for循环来做到这一点。创建一个包含一系列元素的数组,然后运行for循环。虽然您将在该时间运行循环,但是请根据给定的三组对数组元素进行计数。最后,您将获得给定范围内的元素总数。为了给您更好的帮助,我在下面举一个例子:
<?php
$number = array(80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110);
$count1 = $count2 = $count3 = 0;
for ($i = 0; $i < sizeof($number); $i++) {
if($number[$i] >= 80 && $number[$i] <= 90 ) {
$count1++;
}
if($number[$i] >= 90 && $number[$i] <= 100 ) {
$count2++;
}
if($number[$i] >= 100 && $number[$i] <= 110 ) {
$count3++;
}
}
echo "The number between 80-90 = ".$count1."<br>";
echo "The number between 90-100 = ".$count2."<br>";
echo "The number between 100-110 = ".$count3."<br>";
?>
答案 1 :(得分:1)
我认为OP可能一直在寻求更多 pythonic 答案(但在PHP中)
//only valid in php 5.3 or higher
function countInRange($numbers,$lowest,$highest){
//bounds are included, for this example
return count(array_filter($numbers,function($number) use ($lowest,$highest){
return ($lowest<=$number && $number <=$highest);
}));
}
$numbers = [1,1,1,1,2,3,-5,-8,-9,10,11,12];
echo countInRange($numbers,1,3); // echoes 6
echo countInRange($numbers,-7,3); // echoes 7
echo countInRange($numbers,19,20); //echoes 0
'use'关键字表示php中的'closure'。出于对其他语言(例如javascript)的理所当然的考虑,外部函数中的变量会自动在范围内(即没有特殊关键字)导入到内部函数中,内部函数也可以称为“部分函数”。
由于某些原因,在PHP 5.2x或更低版本中,变量不会自动在作用域范围内导入,而在PHP 5.3或更高版本中,use关键字可以克服这一问题。语法非常简单:
$functionHandle = function(<arguments>) use (<scope-imported variables>){
//...your code here...
}
答案 2 :(得分:1)
在确定号码所属位置后,为避免过多的比较跳转到下一个循环。
function countOccurences( array $numbersArray ):array
{
$return = array('n80to90' => 0, 'n90to100' => 0, 'n100to110' => 0);
foreach( $numbersArray as $number ){
if( $number < 80 || $number > 110 )
continue;
if($number < 91){
$return['n80to90']++;
continue;
}
if($number < 101){
$return['n90to100']++;
continue;
}
$return['n100to110']++;
}
return $return;
}
答案 3 :(得分:0)
我无法想象您希望将代表两组价值的统计图形归为两组。因此,我将提供一种无条件的无功能技术,该技术可以在foreach循环中执行。
代码:(Demo)
$sampleData = range(80, 110);
$result = array_fill_keys(['80s', '90s', '100s'], 0); // set 0 defaults for incrementation
foreach ($sampleData as $value) {
++$result[(10 * ((int)($value / 10) <=> 9) + 90) . 's'];
}
var_export($result);
输出:
array (
'80s' => 10,
'90s' => 10,
'100s' => 11,
)
我的技术通过以下方法从值中制造出适当的键:
floor()
相同的作用-1
,0
或1
) ++
意味着用相应的键将1加到元素的当前值。
或者,如果要将值分组为“ 90+以下”(80-90),“ 100+以下”(91-100)和“ 110+以下”(101-110),则为调整密钥生成因子很简单。
我将展示分配给每个组的元素,而不是进行计数。
代码:(Demo)
$sampleData = range(80, 110);
foreach ($sampleData as $value) {
$result[(10 * ((int)(($value - 1) / 10) <=> 9) + 100) . '+under'][] = $value;
}
var_export($result);
输出:
array (
'90+under' =>
array (
0 => 80,
1 => 81,
2 => 82,
3 => 83,
4 => 84,
5 => 85,
6 => 86,
7 => 87,
8 => 88,
9 => 89,
10 => 90,
),
'100+under' =>
array (
0 => 91,
1 => 92,
2 => 93,
3 => 94,
4 => 95,
5 => 96,
6 => 97,
7 => 98,
8 => 99,
9 => 100,
),
'110+under' =>
array (
0 => 101,
1 => 102,
2 => 103,
3 => 104,
4 => 105,
5 => 106,
6 => 107,
7 => 108,
8 => 109,
9 => 110,
),
)