根据对象值对对象数组进行排序

时间:2013-11-12 19:26:51

标签: php arrays sorting

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

所以我有一个看起来像这样的数组:

$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。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

您所需要的只是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