PHP:如何使用和维护密钥?

时间:2015-03-19 23:20:13

标签: php arrays json sorting

我有以下数组(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"
  }
]

我是否需要在回调函数中执行某些操作或使用以保留密钥?

2 个答案:

答案 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);

?>