在php对象上使用usort无法正常工作

时间:2014-11-24 00:29:43

标签: php

我似乎无法正常排序此功能。这是我的代码:

    function cmpPriceDesc($a, $b)   {
        return strcmp($a->product_price, $b->product_price);
     }

     usort($this->products, "cmpPriceDesc");

返回以下内容:

Array
    (
[0] => stdClass Object
    (
        [virtuemart_manufacturer_id] => 2
        [mf_name] => Karl
        ...
        [product_price]=> 127.445
    )
 [1] => stdClass Object
    (
        [virtuemart_manufacturer_id] => 7
        [mf_name] => Karl
        ...
        [product_price]=> 13.445
    )
  [2] => stdClass Object
    (
        [virtuemart_manufacturer_id] => 5
        [mf_name] => Karl
        ...
        [product_price]=> 13.445
    )
  [3] => stdClass Object
    (
        [virtuemart_manufacturer_id] => 11
        [mf_name] => Karl
        ...
        [product_price]=> 18.000
    )

正如您所看到的,产品价格不会从高到低。关于为什么的任何想法?

1 个答案:

答案 0 :(得分:1)

cmpPriceDesc()应遵循usort的规范:

  

如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。

它很简单:

function cmpPriceDesc($a, $b)   {
    return $b->product_price - $a->product_price;
}

我推断,如果函数名中的 Desc ,你首先需要更高的值。