0

我有一个看起来像这样的对象/数组:

$methods = 
    Array
    (
        [0] => stdClass Object
            (
                [total] => 5.32
            )

        [1] => stdClass Object
            (
                [total] => 14.16
            )

        [2] => stdClass Object
            (
                [total] => 2.89
            )

    )

我想通过我尝试使用 cmp 函数和 uasort 的 usort 对整个事物进行升序排序total,但我无法让它工作,一个函数抱怨它是一个对象,而另一个函数抱怨它是一个数组。

4

2 回答 2

3

从 PHP 5.3 起,您可以使用带有闭包的 usort 来完成此操作

usort($methods, function($a, $b) { return $a->total - $b->total; });

在 PHP 5.3 之前,您必须单独定义函数并将其作为字符串传递。

if(!function_exists("totalSorter")){
  function totalSorter($a, $b){
    return $a->total - $b->total;
  }
}
usort($methods, "totalSorter");
于 2013-07-29T16:45:19.667 回答
1
<?php
//Initializing everything.
$obj1 = new stdClass();
$obj1->total = 5.32;

$obj2 = new stdClass();
$obj2->total = 14.16;

$obj3 = new stdClass(); 
$obj3->total = 2.89;

$methods = [$obj1, $obj2, $obj3];
//Make sure everything is setup correctly.
var_dump($methods);

//Magic
usort($methods, function($a, $b) {
    if ($a === $b) {
        return 0;
    }
    return $a > $b ? 1 : -1;
});

//Ta-da~
var_dump($methods);
于 2013-07-29T16:46:23.177 回答