排序数组 - 从外部数据对数组排序
问题描述:
我试图根据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);
}
问题有时根据用户检索就不能正确排序它的顺序,有没有更好的方式来做到这一点,还是这个好,我做错了? 谢谢。
答
使用uasort
http://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
字段。
为什么不作为查询的一部分在数据库中排序? 'SELECT name,ord FROM table ORDER BY ord' – 2013-04-23 08:02:34
@AleksG我现在感觉很糟糕:(大声笑很简单,谢谢! – MichaelMitchell 2013-04-23 08:10:03
只是微笑和使用它 – 2013-04-23 08:16:51