我有以下数组(JSON-ified以便于查看):
{
"23": {
"price": "33.99"
},
"38": {
"price": "30.86"
},
"51": {
"price": "31.49"
}
}
我想通过price
键对此进行排序,但我希望结果也返回包含价格的元素的键,如下所示:
{
"38": {
"price": "30.86"
},
"51": {
"price": "31.49"
},
"23": {
"price": "33.99"
}
}
我的usort
回调就是这样:
private function _price_sort($a, $b)
{
if ($a['price'] == $b['price']) {
return 0;
}
return ($a['price'] < $b['price']) ? -1 : 1;
}
...以正确的顺序返回数组,但没有元素容器:
[
{
"price": "30.86"
},
{
"price": "31.49"
},
{
"price": "33.99"
}
]
我是否需要在回调函数中执行某些操作或使用以保留密钥?
答案 0 :(得分:6)
使用uasort()
维护您的密钥
此函数使用用户定义的比较函数对数组进行排序,使数组索引与它们关联的数组元素保持相关性。
答案 1 :(得分:0)
试试这个:
<?php
$json = '{
"23": {
"price": "33.99"
},
"38": {
"price": "30.86"
},
"51": {
"price": "31.49"
}
}';
$array = json_decode($json, true);
asort($array);
print_r($array);
?>