php string number concatenation messed up

本秂侑毒 提交于 2019-11-27 04:49:36

问题


I got some php code here:

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

which outputs 234,

but when I add a number 11 before "hello":

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

It outputs 1334 rather than 245(which I expected it to), why is that?


回答1:


That's strange...

But

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

OR

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

fixing issue.


UPDv1:

Finally managed to get proper answer:

'hello' = 0 (contains no leading digits, so PHP assumes it is zero).

So 'hello' . 1 + 2 simplifies to 'hello1' + 2 is 2, because no leading digits in 'hello1' is zero too.


'11hello ' = 11 (contains leading digits, so PHP assumes it is eleven).

So '11hello ' . 1 + 2 simplifies to '11hello 1' + 2 as 11 + 2 is 13.


UPDv2:

http://www.php.net/manual/en/language.types.string.php

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits.




回答2:


The dot operator has the same precedence as + and -, which can yield unexpected results.

That technically answers your question... if you want numbers to be treated as numbers during concatination just wrap them in parenthesis.

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



回答3:


you have to use () in mathematical operation

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



回答4:


You should check PHP type conversion table to get better idea what's happen behind the scenes: http://php.net/manual/en/types.comparisons.php




回答5:


If you hate putting operators in between assign them to vaiable

$var = 1 + 2;

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


来源:https://stackoverflow.com/questions/16294821/php-string-number-concatenation-messed-up

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!