2014-11-24 57 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