组和排序关联数组?

时间:2016-01-12 01:58:36

标签: php arrays sorting foreach

我有一个关联数组的以下输出值(id => value):

1GB - 4GB
 1TB - 2TB
 3TB - 5TB
 5GB - 16GB
 6TB+
 17GB - 32GB
 33GB - 63GB
 64GB - 120GB
 121GB - 200GB
 201GB - 300GB
 301GB - 500GB
 501GB - 1TB

如何对其进行分组和排序,以便让它从最小到最大:

这样:

1GB - 4GB
5GB - 16GB
etc...
etc..
501GB - 1TB
1TB - 2TB
etc..

我有以下循环:

foreach($hdArray as $key => $value) {

 echo '<label><input type="radio" class="checkbox" name="hd" value="'.$key.'" /> '.$value.'</label>';

}

2 个答案:

答案 0 :(得分:1)

发表评论作为后代的答案......

当您拥有无法轻松排序的字符串并从数据库表中获取数据时,您可以:

  1. 将名为weight的列添加到数据类型的表中 整数

  2. 在重量栏中,根据具体情况使用更高或更低的数字     你希望数据排序。

  3. 查询数据时,将ORDER BY weight DESC添加到您的查询中     以您希望的方式获取结果

答案 1 :(得分:0)

如果数据不是来自表格,您可以试试这个。

$arr = [
    '8TB' => '8TB',
    '1GB' => '4GB',
     '1TB' => '2TB',
     '3TB' => '5TB',
     '5GB' => '16GB',
     '17GB' => '32GB',
     '33GB' => '63GB',
     '64GB' => '120GB',
    ];

foreach($arr as $key => $val){
    $unit = strtoupper(trim(substr($key, -2)));
    $io[$unit][$key] = $val; 
}

function cmpValue($a, $b){
    return (substr($a, 0, -2) > substr($b, 0, -2)) ? true :false;
}

$sd = array_map(function($ele){
   uksort($ele, 'cmpValue');
   return $ele;
}, $io);


function cmpUnit($a, $b){
    $units = array('B'=>0, 'KB'=>1, 'MB'=>2, 'GB'=>3, 'TB'=>4,    'PB'=>5, 'EB'=>6, 'ZB'=>7, 'YB'=>8);
  return $units[$a] > $units[$b];
}

uksort($sd, 'cmpUnit');
$sordArray =  call_user_func_array('array_merge', $sd);
print_r($sordArray);