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);
}

问题有时取决于检索用户的顺序,它不会正确排序,有没有更好的方法来做到这一点,或者这很好,我做错了?谢谢。

4

1 回答 1

2

使用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原件操作array到位。

结果:

 var_dump($myArray);

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

推荐:

如果您可以编辑SQL查询,最好使用ORDER BY如下指令缩短查询中的结果:

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

这应该运行得更快。如果使用这个,建议添加indexposition字段。

于 2013-04-23T08:02:27.400 回答