2015-10-20 39 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'获得一个新值,然后在下一个循环中使用并赋值一个新值。我现在看到它。谢谢! –