簡體   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