2013-04-23 97 views
0

我试图根据SQL数据库中未排序的数组创建一个有序数组。排序数组 - 从外部数据对数组排序

是从数据库中得到看起来像这样的数据:

Array (
    //array ('name', position) 
    array ('george', 2), 
    array ('lenny' , 4), 
    array ('rabbit', 1), 
    array ('pet' , 3) 
) 

的想法是在数组中的名字',其中position有放置在数组中排序。 我想做些什么来最终被:

Array ('rabbit', 'george', 'pet', 'lenny') 

目前的办法,我已经尝试这是使用split_array()

$result是从数据库中排列。

foreach ($result as $res){ 
    $a = array(array($res['name'], $res['position'])); 
    array_splice($finalArray, ($res['position'] - 1), 0, $a); 
} 

问题有时根据用户检索就不能正确排序它的顺序,有没有更好的方式来做到这一点,还是这个好,我做错了? 谢谢。

+3

为什么不作为查询的一部分在数据库中排序? 'SELECT name,ord FROM table ORDER BY ord' – 2013-04-23 08:02:34

+0

@AleksG我现在感觉很糟糕:(大声笑很简单,谢谢! – MichaelMitchell 2013-04-23 08:10:03

+0

只是微笑和使用它 – 2013-04-23 08:16:51

回答

2

使用uasorthttp://php.net/manual/en/function.uasort.php功能,您可以通过用户定义的比较讨论function这样的:

$myArray = array(array('bill',3),array('joe',4),array('john',1)); 

/** 
* @desc compare two arrays by the second element 
* @param array $a (array to compare with an other) 
* @param array $b (array to compare with an other) 
* @return int 0|1|-1 equals|first is bigger|second is bigger 
*/ 
function myCompare($a,$b){ 
    if($a[1] == $b[1]){ 
     return 0;  //if the 2nd elements equals return 0 
    } 
    return ($a[1] > $b[1])?1:-1; //if the 2nd element of the 1st parameters is bigger returns 1 , else returns -1 
} 

用法:

uasort($myArray, 'myCompare'); 

uasort manipolates代替原来array

结果:

var_dump($myArray); 

array(
     array('john',1), 
     array('bill',3), 
     array('joe',4) 
); 

建议:

如果你能与ORDER BY指令这样的编辑SQL查询,更好地做空结果查询:

SELECT `name`,`position` 
FROM `mytable` #your table name 
WHERE 1 #or your conditions here 
ORDER BY `position` ASC #ordering directive 

这应该跑得更快。如果使用这个,建议将index添加到position字段。