我有一张这样的表:
// table
+----+--------+------------+
| id | name | reputation |
+----+--------+------------+
| 1 | jack | 534431 |
| 2 | peter | 334 |
| 3 | amos | 1300 |
| 4 | carter | 13490 |
| 5 | basil | 1351 |
+----+--------+------------+
现在我想将reputation
的值转换为基于千克的数字。目前我通过SQL做到这一点。像这样:
SELECT id, name,
CASE WHEN value >= 1000 THEN
CONCAT(TRIM(TRAILING '.' FROM SUBSTR(TRUNCATE(number/1000, 1), 1, 4)), 'k')
ELSE value
END as reputation
FROM `table`
是的,它有效,我想知道如何通过PHP做到这一点?我想这样做会更灵活,更快捷。那有没有PHP功能?
编辑:以下是上述查询的输出:
// newtable
+----+--------+------------+
| id | name | reputation |
+----+--------+------------+
| 1 | jack | 534k |
| 2 | peter | 334 |
| 3 | amos | 1.3k |
| 4 | carter | 13.4k |
| 5 | basil | 1.3k |
+----+--------+------------+
答案 0 :(得分:0)
您可能选择使用PHP的一个原因是,当您想要显示其他值(如M(百万))时,它会提供一些灵活性,或者可能为每个值级别显示不同的后缀,例如当您在数以千计显示K,数以百万计显示M.
以下是一些可以在PHP中使用的代码:
function getPrettyNumber($n) {
if($n>=1000000000000) return round(($n/1000000000000),1).'T';
else if($n>=1000000000) return round(($n/1000000000),1).'B';
else if($n>=1000000) return round(($n/1000000),1).'M';
else if($n>=1000) return round(($n/1000),1).'K';
return number_format($n);
}
使用round()
和1作为第二个参数是可选的
您可以轻松修改上述代码以适合您的使用案例。
答案 1 :(得分:0)
最佳解决方案:
function getPrettyNumber($n) {
if ( $n < 10000 ) return $n;
elseif ( $n < 100000 ) return round( $n / 1000, 1) . "k";
elseif ( $n < 1000000 ) return floor( $n / 1000 ) . "k";
elseif ( $n < 1000000000) return floor( $n / 1000000) . "M";
else return "Wow!!!";
}
此处还有一些示例:
1 => 1
10 => 10
100 => 100
1000 => 1000
1001 => 1001
10000 => 10k
10100 => 10.1k
100000 => 100k
101000 => 101k
101111 => 101k
1000000 => 1M
1111111 => 1M
10111111 => 10M
11000000 => 11M