Cor*_*nja 1 php arrays sorting json
我无法弄清楚如何根据使用php的最高分数计算从数组中获取前10个记录.我从表中取出记录,执行计算并将结果存储在数组名称分数中,并与查询字符串(Array)的其余部分相关联,这样我就可以将该计算带入JSON.我的问题是我只需要进行前10名得分最高的记录.
$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();
Run Code Online (Sandbox Code Playgroud)
请告知我需要做什么才能将数组中的前10条记录传递给JSON对象.
首先,创建复杂的MySQL查询更好.
MySQL计算得分几乎是免费的,比较所有结果的返回和php中的计算成本.
我建议创建SQL查询+"按分数限制10".
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
Run Code Online (Sandbox Code Playgroud)
此代码用于在得分计算类型之间切换
CASE gdp
WHEN 0 THEN bronze*silver
ELSE bronze*silver / 1000
END
Run Code Online (Sandbox Code Playgroud)