如何根据php中的另一个数组获取排序数组

时间:2012-01-10 06:19:18

标签: php mysql

我有一个脚本,其中我有这个字段DId(不是自动增量),评级,它们是逗号分隔,评级来自数据库。现在我必须根据ratings.i显示最高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

2 个答案:

答案 0 :(得分:0)

欢迎来到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
)

答案 1 :(得分:0)

更清洁的解决方案是使用用户定义的排序:

http://php.net/manual/en/function.usort.php