如果这是一个过于讨论的问题,请原谅我。我10天前开始自学php,我必须做一个练习。我通过几个来源阅读相关文章也包括php手册。我没有太多的编程知识,所以我所做的就是不太好。无论如何,我写这里是因为我希望有人可以解释我做了什么错,应该怎么做。所以提前做好准备。练习是:
完成以下PHP脚本,以便打印给定点的总和和平均值。这些点作为字符串发送到脚本,其中点用逗号分隔(例如4,5,2)。点被分成具有爆炸函数的数组。脚本的目的是打印用空格分隔的点。只写缺少的语句,不要在文本框中写入整个程序。不完整的计划:
$numberstring = $_GET['numberstring'];
$numberarray = explode(',',$numberstring);
// Your code here
echo "Points were: $points\n";
echo "Sum of points: $sum\n";
echo "Average of points: $average";
?>
Example output
Points were: 3 6 7 -2 0
Sum of points: 14
Average of points: 2.8
以下是我的尝试:
<html>
<head>
<title>Online PHP Script Execution</title>
</head>
<body>
<?php
$numberstring = $_GET['numberstring'];
$numberarray = explode(',',$numberstring);
for ($i=0; $i<=$numberarray.length;$i++)
echo "points were:" ;
{ $points=$numberarray[$i];
$sum=$points+$sum;
echo $points;
};
echo "Sum of points: $sum\n";
while ($i!=0)
{$average=$sum/$i;
}
echo "Average of points: $average";
?>
</body>
</html>
答案 0 :(得分:3)
您必须使用某些功能:
要打印点,您可以使用implode(' ', $numberarray)
它将显示用空格分隔的点。 (见implode()
)
Sum可以通过函数array_sum()
获取:此函数计算数组中值的总和。
$sum = array_sum($numberarray);
最后,平均值可以通过以下代码获得:
$average = array_sum($numberarray) / count($numberarray);
结果:
$points = implode(' ', $numberarray);
$sum = array_sum($numberarray);
$average = array_sum($numberarray) / count($numberarray);
echo "Points were: $points\n";
echo "Sum of points: $sum\n";
echo "Average of points: $average";
关于您已完成的代码:
for ($i=0; $i<=$numberarray.length;$i++)
这不起作用。
在PHP中,如果要获取数组中的元素数,则必须使用count()
for ( $i = 0 ; $i < count($numberarray) ; $i++ ) { ... }
另外,您在echo "points were:" ;
和for()
之间写{
。
您将收到致命错误。你必须在循环之前移动你的回声
echo "points were:" ;
for ( $i = 0 ; $i < count($numberarray) ; $i++ ) {
$points = $numberarray[$i];
$sum = $points+$sum; // You can also do $sum += $points;
echo $points." ";
}
关于你的while()
循环,它会循环无限,你不需要循环。
你可以这样做:
$average = $sum / count($numberarray);
您的最终代码如下:
$numberstring = $_GET['numberstring'];
$numberarray = explode(',',$numberstring);
echo "Points were:" ;
for ( $i = 0 ; $i < count($numberarray) ; $i++ ) {
$sum += $numberarray[$i];
echo $numberarray[$i]." ";
}
echo "\n";
$average = $sum / count($numberarray);
echo 'Sum of points: '.$sum."\n";
echo 'Average of points: '.$average;
使用一些验证/优化进行编辑:
$numberstring = $_GET['numberstring'];
$numberarray = explode(',',$numberstring);
$cptElements = count($numberarray); // create a variable to not call count() multiple times.
if ( $cptElements )
{
$numberarray = array_map ('intval', $numberarray); // convert all values to int.
echo "Points were:" ;
for ( $i = 0 ; $i < $cptElements ; $i++ ) {
$sum += $numberarray[$i];
echo $numberarray[$i]." ";
}
echo "\n";
echo 'Sum of points: '.$sum."\n";
echo 'Average of points: '.($sum / $cptElements);
}
else
{
echo 'No points';
}
答案 1 :(得分:1)
不应该做这样的事情:
$string = $_GET['numbers'];
$numbers = array_map('intval', explode(',', $string));
$sum = array_sum($numbers);
$average = $sum / count($numbers);
array_map函数可以对数组中的所有元素执行另一个函数(这个函数确保您只处理整数值)。 尝试尽可能多地使用PHP中的函数; array_sum()和count()。第一个元素将数组中的所有元素相加,第二个元素计算数组中元素的数量。 这两个功能组合在一起可以为您生成平均值。
在您的示例代码中,我可以看到for ($i=0; $i<=$numberarray.length;$i++)
$ numberarray.length看起来像javascript给我...不是PHP,尝试使用前面提到的count()方法
答案 2 :(得分:1)
使用此
$numberstring = $_GET['numberstring'];
$numberarray = explode(',',$numberstring);
echo "Points were: ".$numberstring;*/
echo "Sum of points: ".array_sum($numberarray );
echo "Average of points: ".array_sum($numberarray)/count($numberarray);
答案 3 :(得分:0)
你去吧
<?php
$numberstring = $_GET['numberstring'];
$numberarray = explode(',',$numberstring);
// Your code here
$sum = array_sum($numberarray);
$count_arr = count($numberarray);
$average = $sum/$count_arr;
$points = str_replace(',',' ', $numberstring);
echo "Points were: $points\n";
echo "Sum of points: $sum\n";
echo "Average of points: $average";
?>
答案 4 :(得分:0)
PHP在数组上没有length
属性。使用count($array_here)
。此外,使用->
而不是.
访问对象(PHP中的类)属性,并且您没有使用对象。在你的情况下,你甚至不需要循环。你的PHP看起来应该更像:
<?php
function array_average($ary){
return array_sum($ary)/count($ary);
}
if(isset($_GET['numberstring'])){
$number_string = $_GET['numberstring'];
$number_array = explode(',', $number_string);
echo 'points were:'.$number_string.'<br />'.
'sum of points:'.array_sum($number_array).'<br />'.
'average:'.array_average($number_array);
}
?>