2024 年日本 PHP 研討會

字串運算子

有兩個字串運算子。第一個是串接運算子('.'),它會傳回左右兩個參數的串接結果。第二個是串接賦值運算子('.='),它會將右側的參數附加到左側的參數。請閱讀賦值運算子以了解更多資訊。

<?php
$a
= "Hello ";
$b = $a . "World!"; // 現在 $b 包含 "Hello World!"

$a = "Hello ";
$a .= "World!"; // 現在 $a 包含 "Hello World!"
?>

另請參閱

新增註釋

使用者貢獻的註釋 6 則註釋

K.Alex
11 年前
對我來說,大括號可以很好地替代字串串接,而且它們輸入速度更快,程式碼看起來也更簡潔。記住要用雙引號 (" "),因為它們的內容會被 PHP 解析,而單引號 (' ') 只會顯示提供的變數名稱。

<?php

$a
= '12345';

// 這個可以運作:
echo "qwe{$a}rty"; // qwe12345rty,使用大括號
echo "qwe" . $a . "rty"; // qwe12345rty,使用串接

// 無法運作:
echo 'qwe{$a}rty'; // qwe{$a}rty,單引號不會被解析
echo "qwe$arty"; // qwe,因為 $a 變成了 $arty,而它未被定義

?>
anders dot benke at telia dot com
20 年前
注意事項 - 點運算子與 + 和 - 的優先順序相同,這可能會產生意想不到的結果。

範例

<php
$var = 3;

echo "Result: " . $var + 3;
?>

以上程式碼會印出 "3" 而不是 "Result: 6",因為首先會建立字串 "Result3",然後將其加到 3,結果為 3,非空的非數字字串會被轉換為 0。

要印出 "Result: 6",請使用括號來改變優先順序

<php
$var = 3;

echo "Result: " . ($var + 3);
?>
Stephen Clay
18 年前
<?php
"{$str1}{$str2}{$str3}"; // 一次連接 = 快速
$str1. $str2. $str3; // 兩次連接 = 緩慢
?>
使用雙引號連接兩個以上的字串,而不是使用多個 '.' 運算子。PHP 會被迫在每個 '.' 運算子處重新連接字串。
hexidecimalgadget at hotmail dot com
15 年前
如果您嘗試使用連接運算子將數字相加,結果將會是這些數字的字串表示形式。

<?php

echo "thr"."ee"; // 輸出字串 "three"
echo "twe" . "lve"; // 輸出字串 "twelve"
echo 1 . 2; // 輸出字串 "12"
echo 1.2; // 輸出數字 1.2
echo 1+2; // 輸出數字 3

?>
biziclop
2 年前
一些位元運算子(and、or、xor 和 not 運算子:& | ^ ~)自 PHP4 起也適用於字串,因此您不必迴圈遍歷字串並執行 chr(ord($s[i])) 之類的操作。

請參閱位元運算子的文件:https://php.dev.org.tw/operators.bitwise

<?php var_dump(
(
'23456787654' ^ 'zVXYYhoXDYP'), // 'Hello_World'
('(!($)^!)@$@' | '@ddhfIvn2H$'), // 'hello_world'
('{}~|o!Wo{|}' & 'Lgmno|Wovmf'), // 'Hello World'
(~'<0-14)(98' & '}}}}}}}}}') // 'AMPLITUDE'
); ?>

線上範例:https://3v4l.org/MnFeb
mariusads::at::helpedia.com
16 年前
小心不要在行尾輸入「.」而不是「;」。

我花了超過 30 分鐘才除錯完一個很長的腳本,就是因為這種錯誤。

<?
echo 'a'.
$c = 'x';
echo 'b';
echo 'c';
?>

輸出是「axbc」,因為第一行有一個點。
To Top