[英]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.