繁体   English   中英

PHP字符串数字连接搞砸了

[英]PHP string number concatenation messed up

我在这里得到了一些 PHP 代码:

<?php
    echo 'hello ' . 1 + 2 . '34';
?>

输出 234,

但是当我在“你好”之前添加一个数字 11 时:

<?php
    echo '11hello ' . 1 + 2 . '34';
?>

它输出 1334 而不是 245(我期望它)。 这是为什么?

那很奇怪...

<?php
    echo '11hello ' . (1 + 2) . '34';
?>

要么

<?php
    echo '11hello ', 1 + 2, '34';
?>

解决了这个问题。


更新 v1:

我终于设法得到了正确的答案:

'hello' = 0 (不包含前导数字,因此 PHP 假定它为零)。

所以'hello' . 1 + 2 'hello' . 1 + 2简化为'hello1' + 2 is 2 因为'hello1'中没有任何前导数字,所以它也为零。


'11hello ' = 11 (包含前导数字,因此 PHP 假定它是 11)。

所以'11hello ' . 1 + 2 '11hello ' . 1 + 2简化为'11hello 1' + 2因为11 + 213


更新 v2:

字符串

该值由字符串的初始部分给出。 如果字符串以有效的数字数据开头,这将是使用的值。 否则,该值将为 0(零)。 有效的数字数据是一个可选的符号,后跟一个或多个数字(可选地包含小数点),后跟一个可选的指数。 指数是“e”或“E”后跟一位或多位数字。

点运算符与+-具有 相同的优先级,这可能会产生意想不到的结果。

从技术上讲,这回答了您的问题……如果您希望在连接期间将数字视为数字,只需将它们括在括号中。

<?php
    echo '11hello ' . (1 + 2) . '34';
?>

您必须在数学运算中使用()

echo 'hello ' . (1 + 2) . '34'; // output hello334
echo '11hello ' . (1 + 2) . '34'; // output 11hello334

您应该检查PHP 类型转换表以更好地了解幕后发生的事情。

如果您讨厌将运算符放在两者之间,请将它们分配给一个变量:

$var = 1 + 2;

echo 'hello ' . $var . '34';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM