首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据最高分从数组中找出前10条记录

问根据最高分从数组中找出前10条记录
EN

Stack Overflow用户
提问于 2013-05-15 18:55:40
回答 4查看 1.9K关注 0票数 1

我不知道如何使用php从一个数组中获取前10条记录,这是基于php的最高分计算。我从表中取出记录,执行计算,并将结果存储在数组名称score中,并与查询字符串( array )的其余部分相关联,以便可以将该计算带入JSON。我的问题是,我只需要携带得分最高的前10名的记录。

代码语言:javascript
复制
    $gold=$_GET['gold_input'];
    $silver=$_GET['silver_input'];
    $bronze=$_GET['bronze_input'];
    $gdp_value=$_GET['gdp_checked'];


    $link = new mysqli('localhost', 'root', '','coa123cdb');
    $myArray = array();

    $query = "SELECT  * FROM  coa123cdb.Country";

    $result = mysqli_query($link, $query)
    or die("Error: ".mysqli_error($link));

    $row_cnt = $result->num_rows;
    if ($result = $link->query($query)) {
    $tempArray = array();
    $score=array();

    $counter=0  ;
    while($row=mysqli_fetch_assoc($result)){

      $tempArray['country_name'] = $row['country_name'];
      $tempArray['gdp']=$row['gdp'];
      $tempArray['population']=$row['population'];
      $tempArray['gold']=$row['gold'];
      $tempArray['silver']=$row['silver'];
      $tempArray['bronze']=$row['bronze'];

                if($gdp_value==0)
            {
                        $score=($bronze*$tempArray['bronze'])+($silver*$tempArray['silver'])+($silver*$tempArray['gold']);

            }
            else
            {
            $score=($bronze*$tempArray[6]+$silver*$tempArray[5]+$silver*$tempArray[4])*$tempArray[1]/$tempArray[2]/10000;
            }
            $tempArray['score']=$score;
            $data[]=$tempArray;
            $counter++;
        }


       echo json_encode($data);
}

$result->close();
$link->close();

请建议我需要做些什么才能将数组中的前10条记录传递给JSON对象。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-15 19:01:29

我希望我对你的理解是正确的,我认为最好的解决方案是对你的数组进行排序,并取前10个值。

要对数组进行排序,有很多函数。因为我太懒而不能全部学习它们,所以我更喜欢usort(),它让我完全控制正在做什么。你可以根据你的“分数”字段进行排序。也许有人会找到一个更好的函数。

要获取前10个元素,可以使用简单的for循环。

如果您不希望对源数组进行排序,则始终可以对其进行复制。

票数 2
EN

Stack Overflow用户

发布于 2013-05-15 19:05:21

首先,创建复杂的MySQL查询要好得多。

与返回所有结果和在MySQL中计算的成本相比,php计算分数几乎是免费的。

我建议创建sql查询+ "order by score limit 10“。

代码语言:javascript
复制
SELECT  *,CASE gdp
WHEN 0 THEN bronze*silver
ELSE bronze*silver / 1000
END as score FROM coa123cdb.Country order by score desc limit 0,10

此代码用于在分数计算类型之间切换

代码语言:javascript
复制
CASE gdp
WHEN 0 THEN bronze*silver
ELSE bronze*silver / 1000
END
票数 5
EN

Stack Overflow用户

发布于 2013-05-15 19:16:01

您必须先对数组进行排序,然后..在获取记录时设置限制尝试如下所示

代码语言:javascript
复制
  ---- your code above it ---

        $tempArray['score']=$score;
        $data[]=$tempArray;
        foreach($data as $value)
        {
           $score[]  = $value['score']
        }
        array_multisort($score, SORT_DESC,$data);

        $i = 0;
        $newArray = array();
        foreach($data as $value)
        {
            if($i < 10)
            {
                $newArray[] = $value;
            }
            $i++;
        }  


  --- code below----------  

$newArray将包含所需的数组...

您可以阅读有关array_multisort()的更多信息

希望能对你有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16563211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档