无法在PHP中订购多维数组

时间:2012-09-18 17:43:16

标签: php multidimensional-array

我有一个像这样的数组

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. PERSON A
  2. PERSON B
  3. PERSON D
  4. PERSON C
  5. 但结果:

    1. PERSON A
    2. PERSON B
    3. PERSON C
    4. PERSON D
    5. 我认为它是由[“eskiPuan”]订购的。

      但我不知道,为什么?


      如果您需要所有代码,可以查看此代表:https://github.com/erayalakese/GPRO-live-standings

      GLS.class.php文件中的类。我正在调用index.php中的函数

3 个答案:

答案 0 :(得分:2)

您只需要替换以下行:

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

这个:

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

因为这是正确的语法,表示您希望按类中的方法排序。

答案 1 :(得分:0)

查看array_multisort我已经将它用于像你这样的多维数组。我必须首先使用循环遍历多维数组来构建我想要排序的值的数组。然后,您可以在array_multisort中使用该数组进行排序。像这样的东西。我认为usort也可以使用

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

array_multisort($arrayOfValuesToSortBy, SORT_ASC, SORT_STRING, $haystack);

答案 2 :(得分:0)

---编辑---

您需要使用:

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

OR(正如Nelson所建议的那样;也测试了一个......它也在起作用):

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

“GLS :: orderManagersFunc”正确引用了用户订单功能,而不仅仅是“orderManagersFunc”(应该输出警告)。这就是为什么你的结果没有被'yeniPuan'订购并保持原样。