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

kma*_*n99 478 php string integer casting type-conversion

有没有办法在PHP中将整数转换为字符串?

Chr*_*son 750

您可以使用该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

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

// Function call
$items = strval($var); // $items === "5";
Run Code Online (Sandbox Code Playgroud)

  • 请考虑编辑明显潜在的SQL注入漏洞...... (29认同)
  • 5年后,我终于删除了SQL示例,因为没有必要回答这个问题并引入了混淆. (21认同)
  • @Kzqai对于任何看过这个例子试图避免注入攻击的人,我会说放弃你逃避字符串的尝试并使用准备好的语句 (7认同)
  • 自从mysql_escape_string被弃用以来编辑,因为它忽略了charset. (6认同)
  • 好点子.我在那里扔了一些mysql_escape_string函数来清理它. (2认同)
  • 警告!!如果您输入某些数字,php在转换为字符串时将对它们进行四舍五入:`strval(0.999999997)`返回`1`。 (2认同)

小智 83

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

两个例子:

 $str = (string) $int;
 $str = "$int";     
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅PHP手册类型杂耍.

  • @Jazzerus如果$ var等于0(零),则变为空字符串.有问题的. (24认同)
  • +1:`$ str ="$ var";`是我最喜欢的投射字符串的方法. (12认同)
  • 将"0"转换为"""可能并不坏; 这真的取决于应用程序.那就是说,你提出了一个很好的观点. (5认同)
  • $ f = 0; 回声"$ f"; 与我合作,零仍然为零.所以我认为"$ var"是一个聪明/有用的答案.运行9999999循环(字符串)需要0.4046459 ...秒而"$ var"需要0.3725229 ...没有区别. (2认同)
  • @SimonForsberg 我用 php 7.4.8 测试了它,它现在将 0 转换为“0” (2认同)

Sev*_*Sev 43

$foo = 5;

$foo = $foo . "";
Run Code Online (Sandbox Code Playgroud)

现在$foo是一个字符串.

但是,你可能想习惯投射.铸造是实现某种目标的正确方法.

$foo = 5;
$foo = (string)$foo;
Run Code Online (Sandbox Code Playgroud)

另一种方法是封装在引号中:

$foo = 5;
$foo = "$foo"
Run Code Online (Sandbox Code Playgroud)

  • 我倾向于铸造,只是因为它使你的意图非常清晰.Casting只有一个目的:改变类型.在某些情况下,其他示例几乎可能看起来像是错误. (5认同)

Ala*_*orm 9

在PHP中有很多方法可以将整数"转换"为字符串.

传统的CS方式是将变量转换为字符串

$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";
Run Code Online (Sandbox Code Playgroud)

您还可以利用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";
Run Code Online (Sandbox Code Playgroud)

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

$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";
Run Code Online (Sandbox Code Playgroud)

我不推荐最终选项,但我已经看到了依赖于这种行为的野外代码,所以我想我会把它传递给它.


Mic*_*Cat 7

所有这些答案都很棒,但如果值为零,它们都会返回一个空字符串.

请尝试以下方法:

    $v = 0;

    $s = (string)$v ? (string)$v : "0";
Run Code Online (Sandbox Code Playgroud)

  • 请注意,问题具体说是"转换整数",而不是浮点数.:) (2认同)

gew*_*wel 6

$intValue = 1;
$string = sprintf('%d', $intValue);
Run Code Online (Sandbox Code Playgroud)

或者可能是:

$string = (string)$intValue;
Run Code Online (Sandbox Code Playgroud)

要么:

settype(&$intValue, 'string');
Run Code Online (Sandbox Code Playgroud)


Use*_*sbs 5

有多种可能的转换方式:

$input => 123
sprintf('%d',$input) => 123
(string)$input => 123
strval($input) => 123
settype($input, "string") => 123
Run Code Online (Sandbox Code Playgroud)