我有一个关联数组的以下输出值(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>';
}
答案 0 :(得分:1)
发表评论作为后代的答案......
当您拥有无法轻松排序的字符串并从数据库表中获取数据时,您可以:
将名为weight
的列添加到数据类型的表中
整数
在重量栏中,根据具体情况使用更高或更低的数字 你希望数据排序。
查询数据时,将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);