为什么这个for循环前置数字?

时间:2015-10-20 05:38:49

标签: php

在此示例中,为什么我的输出321_content?不应该是_contenet吗?环路是否会在每次迭代时覆盖$string变量,在应用4_contentsubstr_content之前留下substr

<?php

$string = "_content";

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

$string = substr($string,1);

echo $string;

1 个答案:

答案 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;

在此代码中,每次迭代时,$ string都会从$ x和$ postfix中获取一个值。在每次迭代时,该值都会被覆盖。 $ postfix保持不变,每次迭代都会覆盖$ string,所以现在最后,$ string包含'4_content'而不是'4321_content'。