2015-10-20 33 views
-2

在這個例子中,爲什麼我的輸出321_content?難道不是_contenet?在每次迭代中循環都不會覆蓋$string變量,在substr_content之前留下的4_content應用於substr之後?這是爲什麼這個循環預計數字?

<?php 

$string = "_content"; 

for ($x=1; $x<5; $x++){ 
    $string = $x . $string; 
} 

$string = substr($string,1); 

echo $string; 
+1

您的預期成果是什麼? – artsylar

+0

如果$ string = _content,那麼你做這個$ string = $ x。 $串;那麼在第一個循環之後$ string就是「1_content」。 – artsylar

+0

閱讀我的問題。它清楚地說明了我的預期結果。 –

回答

1

是的,你覆蓋$ string,但新值也包含$ string。 $ string的新值變爲$ x加上以前的字符串值。所以在每次迭代中都會附加一個額外的數字。

它與處理此代碼的順序有關。在這樣的分配中,首先計算表達式的結果(在此例中爲$x . $string)。之後,表達式的結果再次分配給變量$ string。

因此,在第一次迭代之後,$ string變成了'1_content',然後是'21_content',依此類推。

當你把分配到另一個變量,您會得到你只希望結果:

<?php 

$postfix = "_content"; 

for ($x=1; $x<5; $x++){ 
    $string = $x . $postfix; 
} 

echo $string; 

在這段代碼中,在每次迭代,$字符串從$ x和$後綴得到的值。在每次迭代中,該值都被覆蓋。 $ postfix保持不變,每次迭代都會覆蓋$ string,所以現在最後$ string包含'4_content'而不是'4321_content'。

+0

啊,呃。我迷惑自己。在循環中,'$ string'獲得一個新值,然後在下一個循環中使用並賦值一個新值。我現在看到它。謝謝! –