这是我的功能:
function getShortNum($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
好的,一切都很好。就在我将一封信传递给该函数时,它返回完全相同的东西。例如:
echo getShortNum("N"); // output: N
为什么呢?我的所有条件都与该函数中的数字有关,而不是字母。它是如何工作的?
答案 0 :(得分:4)
因为PHP确实type juggling。它将转换字符串&#34; N&#34;到一个整数,所以它可以在你的if / else语句中进行比较。 &#34; N&#34;变为零,与您的第一次比较匹配。
类型杂耍是PHP的一个非常重要的方面,因为没有完全理解它可能导致难以检测到错误和意外结果。
如果您的目标是阻止转换非数字值,则应使用is_numeric()
,is_integer()
和filter_var()
等功能检查数据类型。
答案 1 :(得分:3)
将N
转换为要比较$n < 10000
的数字时,$n
变为0
,这会导致第一个条件为真。 (这只是返回$n
,在这种情况下,是N
。)