PHP uasort没有排序数组

时间:2014-11-10 20:19:23

标签: php arrays sorting

我有一个值数组($ arrayToSort),如下所示

0f03895b-3db8-4bf5-a1b1-62b47f5dab5c: 500
1af8cd11-e2ae-4bf9-8024-f0d4874b2d74: 1030
1d815a24-06de-4794-a3f0-7d38857fee4b: 2033
3c0454fc-e1e5-43b7-ac03-b746a36d06a1: 1034
3d78d082-c6b7-462e-8f7f-38acdd3de761: 2029
8cea7e76-9873-4a98-903f-2b4af3986796: 2250
9bbf7197-f167-4691-8194-2e8868070bb4: 500
9f1dcc1a-6561-411c-b1a7-6af19efe77f3: 2052
28fb81b0-7162-40fc-bb5b-c266f43f3593: 2214
35eed79a-f879-43fa-952b-806f047d66a8: 3038
41ed4161-077a-4370-a1fb-47ddd112b5df: 6076
50cb8711-0ffb-4da2-97d6-033a948ea7c5: 1030
80b0e919-054f-4d4b-b0b6-3a8e14647879: 1035
88c17b89-5b82-4348-ab03-47d4794412fd: 428
275fd6b6-b880-4e25-bd7d-cd609685e922: 1031
630b8187-edfb-44de-ae23-e81b670c9706: 29
700c8740-9cae-444b-b69c-ad4361bfaf81: 230
5414bfe7-4d9b-41e0-bf56-d6da7534db8c: 29
7262ccf0-09a3-450b-a258-6aa1c1072fb8: 4037
7486a107-390a-43a3-8cc5-b6de094d50cb: 600
b1d3a6a6-b107-4665-ad86-4bd827b8a76e: 29
b6487821-c823-4262-aaaf-e758d38e2826: 214
bfa88b65-3724-47d1-a3c6-055abd568d27: 2333
f47e1e05-da9a-40bf-9b0d-b8f86cbcd522: 2032
fd1bbd8d-21e9-44c3-8916-a54ee3a554cc: 2000

以及我自定义的排序功能

private function arraySort($a, $b) {
        if ($a == $b) {
            return 0;
        }
        return ($a < $b) ? -1 : 1;
    }

当我使用上述数据集和函数使用uasort($arrayToSort,array('self','arraySort));调用我的sort函数时,我以完全相同的顺序返回我的数据。我已经尝试使用我的比较函数与usort,我得到了排序的值(尽管没有键当然)。对于我的生活,我无法理解为什么当usort能够这样做时,uasort未能对这些值进行排序。我是否错误地调用了该功能?

1 个答案:

答案 0 :(得分:2)

与您提供的代码相比,您对uasort的调用似乎有误。

如果您希望使用独立回调来呼叫uasort,则应使用uasort($array, 'arraySort');

如果您要在对象实例中调用uasort,而回调是实例方法,则应使用uasort($array, array($this, 'arraySort')); (因为你的方法是私人的我认为这是你需要的电话

如果您要在对象实例中调用uasort,而回调是当前类的静态方法,则< / strong>你应该使用uasort($arrayToSort,array('self','arraySort'));

此外,您可以像这样简化排序方法:

private function arraySort($a, $b) {  
    return strcmp($a, $b);
}

根据你的回答,并假设上面列出的例子是#34;字符串&#34;,你需要先排序这些值,然后再排序才能访问字符串末尾的实际整数。 / p>

在您的课程中使用uasort($array, array($this, 'arraySort')),以及

private function arraySort($a, $b) { 
    $intOfA = explode(":", $a);
    $intOfA = intval(trim($intOfA[1]));
    $intOfB = explode(":", $b);
    $intOfB = intval(trim($intOfB[1]));
    return $intOfA - $intOfB;
}

应该这样做。