将整数转换为字符串在PHP中

622

在PHP中有一种将整数转换为字符串的方法吗?


12
PHP 是一种弱类型语言。曾经是整数类型的变量,也可以在 echo 这个函数中被视为字符串类型(即所谓的“字符串上下文”)。 - hakre
3
@hakre,是的,PHP 是弱类型语言,并且使用 echo 会以字符串方式输出值。但是这不会在内部改变变量的数据类型。因此,使用 strval($variable) 是正确的。 - nice_dev
3
strval()函数在内部不会改变$variable变量的值。 - hakre
4
我是说 $variable = strval($variable); - nice_dev
15个回答

962
你可以使用 strval() 函数将数字转换为字符串。
从维护的角度来看,这种方法比其他一些更玄学的答案更易于理解。当然,这取决于你的上下文。
$var = 5;

// Inline variable parsing
echo "I'd like {$var} waffles"; // = I'd like 5 waffles

// String concatenation 
echo "I'd like ".$var." waffles"; // I'd like 5 waffles

// The two examples above have the same end value...
// ... And so do the two below

// Explicit cast 
$items = (string)$var; // $items === "5";

// Function call
$items = strval($var); // $items === "5";

2
好的,我在其中加入了一些mysql_escape_string函数来清理它。 - Chris Thompson
6
自从mysql_escape_string被弃用后,因为它忽略字符集,所以需要进行编辑。 - Kzqai
7
针对任何希望防范注入攻击的人,我建议放弃转义字符串的尝试,改用预处理语句。 - chacham15
26
经过5年的时间,我终于移除了SQL示例,因为它对回答问题没有必要,反而会造成困惑。 - Chris Thompson
8
警告!如果您传递某些数字给 PHP 并将它们转换为字符串,则 PHP 将对其进行四舍五入:strval(0.999999997) 返回 1 - danielson317
显示剩余7条评论

114

有很多方法可以做到这一点。

以下是两个例子:

 $str = (string) $int;
 $str = "$int";     

请查看PHP手册上类型转换的相关内容。


56
$foo = 5;

$foo = $foo . "";

现在$foo是一个字符串。

但是,您可能希望学会强制转换。因为强制转换是完成这种操作的正确方式:

$foo = 5;
$foo = (string)$foo;

另一种方法是将其用引号包裹:

$foo = 5;
$foo = "$foo"

如此令人惊奇,我们都选择了5。另外,“+”是Java。 - karim79
我认为你在不同的语言之间混淆了连接语法。 - jason
8
我倾向于使用强制类型转换,因为它可以清晰地表达你的意图。强制类型转换只有一个目的:改变数据类型。在某些情况下,其他示例可能看起来像是错误。 - Frank Farmer

13

在PHP中,有多种方法可以将整数“转换”为字符串。

传统的计算机科学方法是将变量强制转换为字符串:

$int = 5;
$int_as_string = (string) $int;
echo $int . ' is a '. gettype($int) . "\n";
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

你还可以利用PHP的隐式类型转换和字符串插值:

$int = 5;
echo $int . ' is a '. gettype($int) . "\n";

$int_as_string = "$int";
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

$string_int = $int.'';
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

最后,与上面类似,任何接受并返回字符串的函数都可以用于将整数转换。考虑以下内容:

$int = 5;
echo $int . ' is a '. gettype($int) . "\n";

$int_as_string = trim($int);
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

我不建议最后一种选择,但我曾经见过现实世界中依赖这种行为的代码,所以我想传递这个信息。


12

使用:

$intValue = 1;
$string = sprintf('%d', $intValue);

或者它可能是:

$string = (string)$intValue;
或者:
settype($intValue, 'string');

10

警告: 下面的答案基于错误的前提。将数字0转换为字符串始终返回字符串"0",使提供的代码冗余。

所有这些答案都很好,但如果值为零,则它们都会返回空字符串。

试试下面的方法:

    $v = 0;

    $s = (string)$v ? (string)$v : "0";

2
请注意,问题明确指出“转换整数”,而不是浮点数。 :) - Microprocessor Cat
1
请纠正错误。正确的形式应该是:$s = (string)$v ? (string)$v : "0"; - nintyfan
1
var_dump((string)0); 在我使用的 PHP 5.5.9(发布日期:2014年2月6日)上打印出 string(1) "0"。你使用的是哪个版本的 PHP,会在值为零时返回“空字符串”? - Lacek

5

有很多可能的转换方式:

$input => 123
sprintf('%d',$input) => 123
(string)$input => 123
strval($input) => 123
settype($input, "string") => 123

4

您可以使用点号运算符并将字符串连接到它上面(它将被强制转换为字符串):

$integer = 93;
$stringedInt = $integer . "";

或者更正确地说,您可以将整数强制转换为字符串:
$integer = 93;
$stringedInt = (string) $integer;

2

正如这里的答案很好地展示了,是的,有几种方法。然而,在PHP中,你很少需要这样做。编写PHP的“教条方式”是依靠语言的松散类型系统,它会根据需要透明地强制转换类型。对于整数值,通常没有问题。但是,您应该非常小心浮点值。


1
我认为PHP并不总是会将整数强制转换为字符串。它会对strlen(12345);这个函数进行转换,但不会对$x = 12345; echo $x[2];这个语句进行转换。所有这些类型转换函数都非常有用,越来越多的程序员正在检查他们的数据类型。 - Elzo Valugi

0

我认为这取决于上下文。可以使用strval()或强制类型转换运算符(string)。但是,在大多数情况下,如果您将其与echo或printf一起使用,PHP将决定什么对您有好处...

一个小提示:die()需要一个字符串,不会显示任何整数 :)


1
在大多数情况下,PHP会为您决定什么是最好的。太棒了 :,) - itsjavi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接