我有一个脚本,其中我有这个字段DId(不是自动增加),评级,他们是逗号分隔的,评级来自数据库。现在我必须根据评级显示最高的5个评级和设备值,我可以通过rsort方法找到评级的最大值,然后将数组切分为5,但问题是如何根据评级获得DId。因为当对数组进行rsort时,我丢失了该数组的原始索引,并且此脚本基于数据库,并且每次更改评级时,设备都会根据评级进行更改。下面是我到目前为止所做的
    $query=mysql_query("SELECT DId,Rating FROM wp_ratings1  WHERE QID='1' LIMIT 5,1");
    $row=mysql_fetch_array($query);
    $no1=explode(",",$row['DId']);
    $array_size=count($no1);
    $list = $row['Rating'];
    $array = explode(',', $list);
    rsort($array);
    $res=array_slice($array,0,5);
    print_r($array);
DId        ||   Rating||
36,37,38,     2.3,2.3,4.5, 
39,41,42,     1.0,0,0,
43,44,45,     3.4,1.2,3.12,
46,52,53   ||   2.33,1.22,0.9发布于 2012-01-10 14:40:48
欢迎来到SO!
在您的示例中,我将解析数据并将其提供给变量,如下所示:
$arrData[0] = array(36=>2.3, 37=>2.3, 38=>4.5);
$arrData[1] = array(39=>1, 41=>0, 42=>0);
$arrData[2] = array(43=>3.4, 44=>1.2, 45=>3.12);
$arrData[3] = array(46=>2.33, 52=>1.22, 53=>0.9);然后处理每个元素,并将其转换为单个数组:
$arrNew = array();
foreach($arrData as $data){
    foreach($data as $key=>$rating){
        $arrNew[$key]=$rating;
    }
}最后,在该数组上执行asort()。
print_r($arrNew);
asort($arrNew);
print_r($arrNew);这是我的测试结果:
Array
(
    [36] => 2.3
    [37] => 2.3
    [38] => 4.5
    [39] => 1
    [41] => 0
    [42] => 0
    [43] => 3.4
    [44] => 1.2
    [45] => 3.12
    [46] => 2.33
    [52] => 1.22
    [53] => 0.9
)
Array
(
    [41] => 0
    [42] => 0
    [53] => 0.9
    [39] => 1
    [44] => 1.2
    [52] => 1.22
    [36] => 2.3
    [37] => 2.3
    [46] => 2.33
    [45] => 3.12
    [43] => 3.4
    [38] => 4.5
)发布于 2012-01-10 15:14:20
更简洁的解决方案是使用用户定义的排序:
http://php.net/manual/en/function.usort.php
https://stackoverflow.com/questions/8799336
复制相似问题