我不知道如何使用php从一个数组中获取前10条记录,这是基于php的最高分计算。我从表中取出记录,执行计算,并将结果存储在数组名称score中,并与查询字符串( 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();请建议我需要做些什么才能将数组中的前10条记录传递给JSON对象。
发布于 2013-05-15 19:01:29
我希望我对你的理解是正确的,我认为最好的解决方案是对你的数组进行排序,并取前10个值。
要对数组进行排序,有很多函数。因为我太懒而不能全部学习它们,所以我更喜欢usort(),它让我完全控制正在做什么。你可以根据你的“分数”字段进行排序。也许有人会找到一个更好的函数。
要获取前10个元素,可以使用简单的for循环。
如果您不希望对源数组进行排序,则始终可以对其进行复制。
发布于 2013-05-15 19:05:21
首先,创建复杂的MySQL查询要好得多。
与返回所有结果和在MySQL中计算的成本相比,php计算分数几乎是免费的。
我建议创建sql查询+ "order by score limit 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此代码用于在分数计算类型之间切换
CASE gdp
WHEN 0 THEN bronze*silver
ELSE bronze*silver / 1000
END发布于 2013-05-15 19:16:01
您必须先对数组进行排序,然后..在获取记录时设置限制尝试如下所示
---- 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()的更多信息
希望能对你有所帮助
https://stackoverflow.com/questions/16563211
复制相似问题