2012-08-26 67 views
0

我有一个数组,我只是试图通过一个score键来排序,该键包含我试图排序的值。所需结果将改变下面阵列的顺序以按以下顺序显示索引:[0][2],[1]PHP数组按数据库排序结果排序

我正在循环从数据库中提取的结果。我创建了一个名为score的密钥,然后将$row2阵列推入一个单独的阵列,因为如果我使用mysql_data_seek,它将删除score密钥。

另外它在底部创建一个不需要的密钥score

我该如何最好地清理这个问题,并确保结果从高到低排序?

$my_array = array(); 

while ($row2 = mysql_fetch_assoc($result2)) 
{ 
//score determined here 
//$row2['score'] = ...more math, variable is numeric, not a string 
array_push($array_page,$row2); 
} 

当前不想要的结果...

Array 
(
    [0] => Array 
     (
      [score] => 7 
     ) 
    [1] => Array 
     (
      [score] => 2 
     ) 
    [2] => Array 
     (
      [score] => 4 
     ) 
    [score] => 
) 

期望的结果......在PHP> 5.3,你可以使用内联functoins

Array 
(
    [0] => Array 
     (
      [score] => 7 
     ) 
    [2] => Array 
     (
      [score] => 4 
     ) 
    [1] => Array 
     (
      [score] => 2 
     ) 
) 
+1

在查询中使用“按分数排序”。 – jordanm

+0

我没有在SQL查询中处理分数。 > __> – John

+0

...但是您使用SQL查询获得分数,对吧?让数据库为你做所有的工作。 – EthanB

回答

1
function scoreSort($a, $b){ 
    if($a['score'] == $b['score']) return 0; 
    return $a['score'] > $b['score'] ? -1 : 1; 
} 
usort(&$myArray, 'scoreSort'); 

usort(&$myArray, function($a,$b){ /* ... */ }); 
+0

在排序时维护KEYS,请使用“uksort” – TheHe

+0

这看起来几乎足够让我接受,只是它以相反的方式排序,最底层的分数最高,而不是我需要的顶端。我可以倒转阵列,但是我可以使用的函数有一个更简单的修改吗?我尝试了将minus运算符更改为加号的更明显的部分,尽管这没有奏效。 – John

+0

已更改;) 只是替换“<" with ">”:D – TheHe