PHP mysqli计算数组结果总数

时间:2016-03-07 21:15:45

标签: php arrays mysqli

我搜索了最近3天,但我无法找到解决方案。我试图计算一个阵列中一个玩家的最低5点的总分,我已经尝试过array_sum但我无法让它工作,无论我尝试什么它只显示5个最低值数组,但没有将它们加在一起,这是代码。

<?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;
            }   

2 个答案:

答案 0 :(得分:0)

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

E.g。

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

您也可以在SQL查询中使用SUM()函数。这可能更快。

答案 1 :(得分:0)

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

基本上这应该做你想要的。我没有对它进行过个人测试,但是它应该以相同的方式运行,而你的逻辑障碍则更少。

$total

你的价值在var c = function(pos) { var lat = pos.coords.latitude, long = pos.coords.longitude, coords = lat + ', ' + long; document.getElementById('google_map').setAttribute('src', 'https://maps.google.co.uk/?q=' + coords + '&z=60&output=embed'); } // <-- HERE document.getElementById('get_location').onclick = function() { navigator.geolocation.getCurrentPosition(c); return false; }