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

これはより速く実行する必要があります。これを使用する場合は、フィールドに追加することindexをお勧めしpositionます。

于 2013-04-23T08:02:27.400 に答える