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. 人乙
  3. 人 D
  4. 个人 C

但结果:

  1. 人甲
  2. 人乙
  3. 个人 C
  4. 人 D

我认为它是按 ["eskiPuan"] 订购的。

但我不知道,为什么?


如果你需要所有代码,你可以查看这个 repo: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

- - 编辑 - -

你需要使用:

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

或者(正如尼尔森所建议的那样;也测试了一个......它也可以工作):

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

用户订单函数被“GLS::orderManagersFunc”正确引用,而不仅仅是“orderManagersFunc”(应该输出警告)。这就是为什么您的结果没有按“yeniPuan”排序并保持原样的原因。

于 2012-09-18T18:02:56.360 回答
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 回答