[英]PHP Getting highest value from array (from SQL select)
我有2个表: dt_times和dt_reports
dt_times包含一个时间列表, dt_reports包含相关时间的投票(正/负)。
我的代码执行以下操作:
((positive-negative)/positive)*100
在所有迭代之后,这里是id => margin的var_dump
array(8) {
[111]=> int(100)
[110]=> int(-100)
[108]=> int(-100)
[100]=> int(100)
[97]=> int(100)
[92]=> int(100)
[59]=> float(-71.4285714286)
[58]=> float(-50)
}
我需要选择最高边距,其中id也是最高的。 因为你可以看到111,100,97和92 - 都具有100的相同值。
到目前为止我的代码是这样的:
while ($row = mysql_fetch_array($result)) {
//Get values for quality
//calculate margin
$arr[$row['id']] = $margin;
$arr2[$margin] = $row['id'];
}
$timeId = $arr2[max($arr)];
但是,在所有循环之后,$ timeId为92,这是数组中最后一个值为100的id
我认为array_keys可能就是答案,但对于我生命中的爱,我无法弄明白=(
使用krsort按键对生成的数组进行排序 - http://us.php.net/manual/en/function.krsort.php 。 它将返回具有最高值的最高键作为第一个元素。
<?php
$a = array(10 => 10, 20=>10, 20=>20);
krsort($a);
var_dump($a);
?>
首先检索数组http://us.php.net/manual/en/function.max.php的最大值,然后遍历数组并找到边距与该最大值匹配的键。
$arr = array();
while ($row = mysql_fetch_array($result)) {
//Get values for quality
//calculate margin
$arr[$row['id']] = $margin;
}
$max = max($arr);
$highestId = 0;
foreach($arr as $id => $margin){
if($margin == $max && $id > $highestId){
$highestId = $id;
}
}
你可以通过创建一个与usort()自定义比较函数一起使用的合适数组来实现,代码如下:
function cmp($a, $b) {
if ($a['id'] == $b['id']) {
if ($a['margin'] == $b['margin']) {
return 0;
}
return ($a['margin'] > $b['margin']) ? -1 : 1;
}
return ($a['id'] > $b['id']) ? -1 : 1;
}
while ($row = mysql_fetch_array($result)) {
//calculate $margin
//...
$arr[] = array('margin'=>$margin ,'id'=>$row['id']);
}
usort($arr, 'cmp');
echo 'The highest id with the highest margin is';
echo ' ID: ' . $arr[0]['id'] . ' MARGIN: ' . $arr[0]['margin'];
//Print full sorted classification
foreach($arr as $val) {
echo 'ID:' . $val['id'] . ' MARG: ' . $val['margin'] . '<br>';
}
这个解决方案会给你$arr
按id排序,保证金从最高到低,所以第一项$arr[0]
是最高的id和margin,你可以循环其余的数组来打印完整的排序表,而不是只是最高的项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.