PHP数组点和平均值之和

时间:2014-08-26 07:19:45

标签: php arrays

如果这是一个过于讨论的问题,请原谅我。我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>

5 个答案:

答案 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);
}
?>