2016-03-07 70 views
1

我已搜索过去3天,但找不到解决方案。我试图计算一个数组中玩家最低5分的总分,我尝试过array_sum,但我无法让它工作,不管我尝试什么,只显示数组的5个最低值,但不会将它们加在一起,这里是代码。PHP mysqli计算数组结果的总数

<?php 
if (isset($_POST['calc'])) { 

    $player = $_SESSION['id']; 

    $result = $conn->query("SELECT * FROM scores WHERE player_id='$player' ORDER by points ASC"); 

    $row = $result->fetch_array(); 
    $row_count = mysqli_num_rows($result); 

    if ($row_count>=10) { // checks that at least 10 rows available 
     $result = $conn->query("SELECT points FROM scores WHERE player_id='$player' ORDER by points ASC LIMIT 5"); // select 5 lowest points 
      while ($row = mysqli_fetch_array($result)) { 
       $total = array($row['points']); 
       $sum = array_sum($total); 
       echo $sum; 
      } 
+0

你的价值谢谢,我会尝试,并获得给予反馈表格。非常感谢您的帮助。 –

回答

0

您正在循环中的每次迭代中创建一个新数组。将元素添加到循环中的数组中,然后在循环完成后使用array_sum,或者将值添加到总和中。

E.g.

$sum = 0; 
while ($row = mysqli_fetch_array($result)) { 
    $sum += $row['points']; 
} 
echo $sum; 

你也可以简单地在你的SQL查询中使用SUM()函数。这可能会更快。

+0

这工作完美,非常感谢你。 –

0

您可以在查询中进行求和以节省处理时间并减少在数据库和应用程序之间的传输。

基本上这应该做你想做的。我没有亲自测试过它,但它应该能够在你的目标中减少逻辑障碍。

$total = 0; 
$result = $conn->query("SELECT count(points) as total FROM scores WHERE player_id='$player' ORDER by points ASC"); 

$row = $result->fetch_array(); 
if($row['total'] >= 10) 
{ 
    $result = $conn->query("SELECT sum(points) as SumPoints FROM scores WHERE player_id='$player' ORDER by points ASC LIMIT 5"); 
    $row = $result->fetch_array(); 
    $total = $row['SumPoints']; 
} 

而且你必须在$total