【问题标题】:How to sort an Array of Objects based on object key - values in PHP?如何根据 PHP 中的对象键值对对象数组进行排序?
【发布时间】:2016-07-06 17:50:45
【问题描述】:

给定一个对象数组,其中数组中的每个对象如下所示:

  "success": true,
  "data": [
    {
      "doctor_id": 4, -- Use this id for getting in method get inquiry doctor offers.
      "clinic": "John",
      "distance": "10 mile"
      "city": "Los Angeles",
      "price": "123",
      "photo": false,
      "rating": {
        "stars": null,
        "reviews": null
      },
      "add_info"=> "Some information",
      "time_after_create": 942 -- in seconds.
    }
  ]

在 php 中是否有任何方法可以让我按 $data->price 从低到高和从高到低排序,然后还按 $data->rating->stars其中 stars 是 0 到 5 之间的数字排序?

我看了一下答案here,其中谈到了array_multisort()

但我不确定它是否能达到我想要的效果。

欢迎提出任何想法或见解。

【问题讨论】:

标签: php arrays sorting object


【解决方案1】:

使用usort,这是一个例子:

function cmp($a, $b)
{
    return strcmp($a->name, $b->name);
}

usort($your_data, "cmp");

在你的情况下,我可以快速提出以下解决方案:

function cmp($a, $b)
{
    if ($a->price == $b->price) {
        return 0;
    }
    return ($a->price < $b->price) ? -1 : 1;
}
usort($your_data, array($this, "cmp"));

注意:“cmp”是可调用的函数(PHP >5.3必须使用)

【讨论】:

  • 这适用于对价格从低到高的物品进行排序,这太棒了。如何从高到低排序??我尝试将 并切换 ? -1:1;但它没有用。编辑:没关系,找到了怎么做。将在几分钟内批准答案。谢谢!
  • @m.chiang 如果我没记错的话,您已经在这里更改了两个子句$a&lt;$b-1 : 1,那么从逻辑上讲,它会返回相同的内容:) 通常用于从高位排序要低,您只需将 IF 子句中的 ''。祝你好运:) p/s:我收到了你的投票。谢谢
【解决方案2】:

也许你应该在解码这个 json 时使用 $assoc 参数。它会将数据作为数组而不是对象提供给您,因此您可以对该数组进行排序。 json_decode

$array1 = json_decode($input, TRUE);

我认为如果您阅读 php 中的 Object Iteration 也会有所帮助。

【讨论】:

  • 数据已经通过json_decode放入。它作为一个包含对象的数组返回。所以你建议将其转换为包含数组的数组?
  • @m.chiang 是的,如果它是所有数组而不是对象,我认为您可以更轻松地使用 array_multisort()
猜你喜欢
  • 2013-11-25
  • 2017-09-29
  • 2021-12-09
  • 1970-01-01
  • 2014-05-29
  • 2017-10-17
  • 2023-02-03
  • 2018-12-27
  • 2021-09-22
相关资源
最近更新 更多