【问题标题】:Sorting an array of objects, based on object value根据对象值对对象数组进行排序
【发布时间】:2013-11-25 03:09:43
【问题描述】:

您可能会认为同一个问题已经发布了一百万次,但我有一个特殊的例外,这使得它有点不同。

所以我有一个如下所示的数组:

$array = array(
    array('name' => 'foo', 'capacity' => "128MB"),
    array('name' => 'foo2', 'capacity' => "256MB"),
    array('name' => 'foo3', 'capacity' => "512MB"),
    array('name' => 'foo4', 'capacity' => "16GB"),
    ...
);

如您所见,我的数据值低于 MB 和 GB,因此结果如下所示:

foo = 128MB
foo4 = 16GB
foo2 = 256MB
foo3 = 512MB

我需要以逻辑方式按容量排序,将 MB 和 GB 值分开,将 MB 放在首位,并且还查看要排序的数字中的 3 位数字,所以我没有得到这种类型的排序:

   1 = 100
   2 =  12
   3 = 140

不幸的是,将所有容量值转换为 MB,然后在需要时仅显示为 GB,这不是一种选择。

我想知道你们这些聪明人的想法是什么?任何帮助将不胜感激!

谢谢!

【问题讨论】:

  • 将所有容量以千字节为单位排序并显示出来。
  • 这是令人难以置信的自定义排序,您尝试过什么,您在哪里卡住了?我在正文中看不到任何for() 循环。像这样的问题通常很快就会被否决。
  • @MonkeyZeus 感谢您的回复,我还没有为此编写太多代码,我更多的是处于“思考如何”阶段。我只是觉得 Stack 可能有一些比我脑子里更好的建议。

标签: php arrays sorting


【解决方案1】:

您只需要usort

   usort($array, function($a, $b){
        $aBytes = convertInBytes($a['capacity']);
        $bBytes = convertInBytes($b['capacity']);

        return $aBytes - $bBytes;
   });

convertInBytes 不存在,你当然需要编码 ;)

这是一个向您展示如何转换为字节的链接:PHP convert KB MB GB TB etc to Bytes

【讨论】:

  • 您可以将最后一行缩短为:return $aBytes - $bBytes;
  • 这很完美!非常感谢让我的生活更轻松!
猜你喜欢
  • 2017-09-29
  • 2021-04-26
  • 1970-01-01
  • 2014-05-29
  • 2021-12-09
  • 2020-12-15
  • 2018-11-01
  • 2021-07-13
  • 2016-02-25
相关资源
最近更新 更多