2014-11-24 2 views
-1

Мне кажется, что эта функция не сортируется должным образом. Вот мой код:Использование usort на объекте 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 
    ) 

Как вы можете видеть, что цена продукта не происходит от высокой к низкой. Есть идеи о том, почему?

+0

Как вы думаете, 'strcmp' делает? – PeeHaa

+0

Я не думаю, что использование сравнения строк для целых/десятичных цен - лучшая идея. – Jhecht

+0

Как вы можете сказать, им относительно новый ... так что не стесняйтесь указывать мне в правильном направлении –

ответ

1

cmpPriceDesc() должны следовать usort «ы спецификации:

Функция сравнения должна возвращать целое число меньше, равно или больше нуля, если первый аргумент считается, соответственно, меньше, равен или больше второго.

Было бы так просто, как:

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

Я выводя вы хотите более высокие значения первого учитывая Desc в имени функции.

+0

Спасибо! Вы очень помогли, вы не только дали ответ, но и объяснили это. –

Смежные вопросы