我有一个像这样的开关盒
switch($filesize_in_bytes){
case "10Mb <= $filesize_in_bytes <= 100Mb":
//do some stuff and break;
case "1Gb <= $filesize_in_bytes <= 10Gb":
//do some stuff and break;
}
正如您所看到的,$filesize_in_bytes
以字节为单位,现在如何将这些值与Mbs和Gbs转换为字节?案例10Mb, 100Mb, 1Gb and so on
我不能将它们直接硬编码为字节,并且值也因用户状态而不同。
案例来自数据库:
$rule1[0] = '10Mb';
$rule1[1] = '100Mb';
$rule2[0] = '1Gb';
$rule2[1] = '10Gb';
答案 0 :(得分:1)
首先,我不太喜欢这个数据库设计。为了不通过将限制实际存储为整数来浪费字节级精度上的空间(对于诸如100Gb
之类的东西需要完整的BIGINT),您可能希望改为执行limit_amount INT UNSIGNED
之类的操作。 limit_unit ENUM('b','kb','Mb','Gb')
。然后从数据库中提取时,您只需进行简单的数学运算即可得到字节值:
$limit_amount = 10; // pull from
$limit_unit = 'Mb'; // database
$units = array('b' => 1, 'kb' => 125, 'Mb' => 125000, 'Gb' => 125000000);
$limit_in_bytes = $limit_amount * $units[$limit_unit];
(请注意,此系统的单元使用kb
和Mb
,它们与kB
和MB
不同,是更常见的单位。如果您想要后者,做出正确的转换!)
这比以字符串形式存储更具数据效率,确保用户在输入字符串时不会放入像“5lolCats”这样的无意义单位,并且可以轻松地将数据拉回字节。
...或者您可以使用BIGINT。我不介意,所以只要你不将整数值存储为字符串。
Tahdah。你已经从数据库中提取了数量而不是字符串,现在你可以进行直接的整数比较,而不需要魔术字符串比较怪异。
答案 1 :(得分:0)
查看以下PHP脚本,该脚本提供了完成此操作的功能: