PHP中含不同货币键名的多维数组按PRICE排序方法求助
按PRICE字段排序PHP多维关联数组
没问题,我来帮你搞定这个排序问题!你遇到的情况是因为sort()函数只适用于索引数组,而且它会重置数组的键,而你的数组是关联数组(主键是货币名称),同时还是多维结构,所以得用更灵活的排序函数——uasort(),它可以保留原数组的键,并且允许你自定义排序规则。
解决方案代码
首先,先把你的示例数组整理成更易读的格式:
$cryptoPrices = [ "MLN" => [ "EUR" => [ "FROMSYMBOL" => "MLN", "TOSYMBOL" => "EUR", "PRICE" => 0.01699 ] ], "BTC" => [ "EUR" => [ "FROMSYMBOL" => "BTC", "TOSYMBOL" => "EUR", "PRICE" => 8769 ] ], "LTC" => [ "EUR" => [ "FROMSYMBOL" => "LTC", "TOSYMBOL" => "EUR", "PRICE" => 141.47 ] ] ];
接下来用uasort()实现按PRICE升序排序:
// 按PRICE升序排序 uasort($cryptoPrices, function($a, $b) { // 提取每个货币的EUR价格进行比较 $priceA = $a['EUR']['PRICE']; $priceB = $b['EUR']['PRICE']; // 太空船运算符(PHP7+)直接返回比较结果,适配排序逻辑 return $priceA <=> $priceB; });
代码细节说明
uasort():这个函数的核心优势是排序后保留原数组的键名(也就是MLN、BTC这些货币标识),完全符合你的需求。- 回调函数中的
$a和$b是数组中两两待比较的元素,我们通过$a['EUR']['PRICE']精准取出每个货币的价格值。 - 太空船运算符
<=>:PHP7及以上版本支持,它会根据两个值的大小关系返回-1、0或1,刚好满足排序函数对返回值的要求,代码简洁又可靠。
调整排序方向
如果需要降序排序(价格从高到低),只需要调换比较的顺序即可:
uasort($cryptoPrices, function($a, $b) { $priceA = $a['EUR']['PRICE']; $priceB = $b['EUR']['PRICE']; return $priceB <=> $priceA; });
升序排序后的结果示例
执行升序排序后,数组结构会变成:
Array ( [MLN] => Array ( [EUR] => Array ( [FROMSYMBOL] => MLN [TOSYMBOL] => EUR [PRICE] => 0.01699 ) ) [LTC] => Array ( [EUR] => Array ( [FROMSYMBOL] => LTC [TOSYMBOL] => EUR [PRICE] => 141.47 ) ) [BTC] => Array ( [EUR] => Array ( [FROMSYMBOL] => BTC [TOSYMBOL] => EUR [PRICE] => 8769 ) ) )
内容的提问来源于stack exchange,提问作者Arnaud
相关产品推荐
相关产品推荐

