如何对PHP二维数组按custom_price字段进行升降序排序
按
custom_price字段排序PHP二维数组 嘿,这个需求在PHP里其实很好实现,用usort()函数配合自定义比较逻辑就能轻松搞定升序和降序两种排序方式。先把你的原数组整理成更清晰的格式方便对照:
$products = [ ['id' => 1204, 'custom_price' => 33.1500], ['id' => 1199, 'custom_price' => 16.83], ['id' => 1176, 'custom_price' => 16.83], ['id' => 1173, 'custom_price' => 11.73], ['id' => 1170, 'custom_price' => 22.5] ];
1. 升序排序(从低到高)
利用PHP7+引入的太空船运算符(<=>)可以非常简洁地实现排序,它会自动返回-1、0或1,完美适配usort()的要求:
// 升序排序(价格从低到高) usort($products, function($a, $b) { return $a['custom_price'] <=> $b['custom_price']; });
如果你的PHP版本低于7,也可以用传统的条件判断写法:
usort($products, function($a, $b) { if ($a['custom_price'] === $b['custom_price']) { return 0; } return $a['custom_price'] < $b['custom_price'] ? -1 : 1; });
排序后,数组会按custom_price从11.73 → 16.83 → 16.83 → 22.5 → 33.15的顺序排列。
2. 降序排序(从高到低)
只需要把太空船运算符两侧的元素调换位置,就能实现反向排序:
// 降序排序(价格从高到低) usort($products, function($a, $b) { return $b['custom_price'] <=> $a['custom_price']; });
同样,低版本PHP的兼容写法:
usort($products, function($a, $b) { if ($a['custom_price'] === $b['custom_price']) { return 0; } return $a['custom_price'] > $b['custom_price'] ? -1 : 1; });
排序后,数组会按custom_price从33.15 → 22.5 → 16.83 → 16.83 → 11.73的顺序排列。
小提示
如果你的custom_price字段是字符串类型(比如从数据库查询后未转换类型),记得先转成数值再比较,避免字符串排序的问题:
// 字符串转数值后排序(升序示例) usort($products, function($a, $b) { return (float)$a['custom_price'] <=> (float)$b['custom_price']; });
内容的提问来源于stack exchange,提问作者Narendra.vyas
相关产品推荐
相关产品推荐

