簡體   English   中英

php usort 多維數組按價格升序排列

[英]php usort multidimensional array order by price asc

我有一個結構像這樣的數組 $product_array sample=

[0] => Array
        (
            [title] => M-SPA Super Camaro B-150 6-Person Inflatable Bubble Spa
            [image] => http://ecx.images-amazon.com/images/I/41F6FuitoYL._SL160_.jpg
            [link] => http://www.amazon.com/stuff
            [price] => 960.01
            [merchant] => amazon
            [discount] => 16
            [brand] => M-SPA
        )

    [1] => Array
        (
            [title] => M Spa Model B-130 Camaro Hot Tub, 71 by 71 by 28-Inch, Gray
            [image] => http://ecx.images-amazon.com/images/I/41zQwjaPqOL._SL160_.jpg
            [link] => http://www.amazon.com/stuff
            [price] => 695.01
            [merchant] => amazon
            [discount] => 
            [brand] => M-SPA
        )

    [2] => Array
        (
            [title] => M-SPA B-121 4-Person Inflatable Bubble Spa, Castello
            [image] => http://ecx.images-amazon.com/images/I/41gnYSSVD5L._SL160_.jpg
            [link] => http://www.amazon.com/stuff
            [price] => 1,016.25
            [merchant] => amazon
            [discount] => 
            [brand] => M-SPA
        )

我不能以最低到最高的價格訂購這個數組..此代碼不起作用

function order_by_price($a, $b) {
  if ($a['price'] == $b['price']) {
        return 0;
    }
    return ($a['price'] < $b['price']) ? -1 : 1;
}
usort($product_array,order_by_price);

我錯過了什么謝謝

您在最后一個數組元素中有一個格式不正確的數值... [price] => 1,016.25 ...
這是一種“貨幣格式”,應以字符串形式呈現: [price] => "1,016.25"
此外,對usort參數有一定的謹慎:

注意:從比較函數返回非整數值,例如 float,將導致回調返回值的內部轉換為整數。 因此,諸如 0.99 和 0.1 之類的值都將轉換為整數值 0,這會將這些值比較為相等。

正確替換(格式化)后,更改您的代碼,如下所示:

function order_by_price($a, $b) {
    $floats = str_replace(",", "", [$a['price'], $b['price']]);
    return ($floats[0] == $floats[1])? 0 : (($floats[0] < $floats[1]) ? -1 : 1);
}

usort($product_array,"order_by_price");

以上將按預期工作......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM