2

私はこのような配列を持っています

array(40) {
  [134114]=>
  array(5) {
    ["yeniPoz"]=>
    int(3)
    ["yeniPuan"]=>
    int(108)
    ["isim"]=>
    string(16) "PERSON A"
    ["eskiPoz"]=>
    string(1) "1"
    ["eskiPuan"]=>
    string(3) "102"
  }
  [307674]=>
  array(5) {
    ["yeniPoz"]=>
    int(2)
    ["yeniPuan"]=>
    int(83)
    ["isim"]=>
    string(16) "PERSON B"
    ["eskiPoz"]=>
    string(1) "2"
    ["eskiPuan"]=>
    string(2) "75"
  }
  [263724]=>
  array(5) {
    ["yeniPoz"]=>
    int(10)
    ["yeniPuan"]=>
    int(65)
    ["isim"]=>
    string(9) "PERSON C"
    ["eskiPoz"]=>
    string(1) "3"
    ["eskiPuan"]=>
    string(2) "65"
  }

[209310]=>
  array(5) {
    ["yeniPoz"]=>
    int(1)
    ["yeniPuan"]=>
    int(72)
    ["isim"]=>
    string(29) "PERSON D"
    ["eskiPoz"]=>
    string(1) "4"
    ["eskiPuan"]=>
    string(2) "62"
  }
...

この配列は、クラス ( public $datas) のパブリック要素です。この配列をYeniPuanで注文したいです。

function orderManagersFunc($a, $b)
{
    return $b['yeniPuan'] - $a['yeniPuan'];
}

function orderManager()
{
    uasort($this->datas, "orderManagersFunc");
}

結果は次のようになります。

  1. ペルソナ
  2. Bさん
  3. 人物D
  4. Cさん

しかし結果:

  1. ペルソナ
  2. Bさん
  3. Cさん
  4. 人物D

["eskiPuan"] による注文だと思います。

でもわからない、なぜ?


すべてのコードが必要な場合は、次のリポジトリを確認できます: https://github.com/erayalakese/GPRO-live-standings

GLS.class.php ファイルのクラス。そして、私は index.php から関数を呼び出しています

4

3 に答える 3

2

次の行を置き換える必要があります。

uasort($this->datas, "orderManagersFunc");

これのために:

uasort($this->datas, array($this,"orderManagersFunc"));

これは、クラス内のメソッドで並べ替えることを示す正しい構文です。

于 2012-09-18T18:06:39.973 に答える
0

array_multisortあなたのような多次元配列にこれを使用したことを調べてください。最初に多次元配列のループを使用して、並べ替えたい値の配列を作成する必要がありました。次に、array_multisort でその配列を使用して並べ替えることができます。このようなもの。usortも効くと思います

foreach($haystack as $key => $row){
    $arrayOfValuesToSortBy[$key] = $row['keyToSortBy']];
}

array_multisort($arrayOfValuesToSortBy, SORT_ASC, SORT_STRING, $haystack);
于 2012-09-18T18:00:15.640 に答える
0

- - 編集 - -

以下を使用する必要があります。

uasort($this->datas, "GLS::orderManagersFunc");

または(ネルソンが示唆したように、それもテストしました...それも機能しています):

uasort($this->datas, array($this, "orderManagersFunc"));

ユーザー注文関数は、「orderManagersFunc」だけでなく、「GLS::orderManagersFunc」によって正しく参照されます (警告を出力する必要があります)。これが、あなたの結果が「yeniPuan」によって注文されず、そのまま残った理由です。

于 2012-09-18T18:02:56.360 に答える