2014-11-24 95 views
-1

我似乎无法使用此功能进行正确排序。这里是我的代码:在不能正常工作的php对象上使用usort

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 
    ) 

正如你所看到的产品价格不高去低。任何想法为什么?

+0

你觉得'strcmp'有什么用? – PeeHaa 2014-11-24 00:30:53

+0

我不认为使用字符串比较的整数/小数价格是最好的主意。 – Jhecht 2014-11-24 00:31:00

+0

正如你所看到的那样,我相对比较新...所以一定要随时指出我的方向 – 2014-11-24 00:35:46

回答

1

cmpPriceDesc()应遵循usort的规格:

比较函数必须返回小于一个整数,等于或大于零,如果第一个参数被认为是分别小于,等于,或大于第二。首先给出说明函数名

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

我推断你想要更高的价值:

它会是那样简单。

+0

谢谢!你一直很有帮助,你不仅给出了答案,而且还解释了它。 – 2014-11-24 00:46:49