-1

如何向 PHP 的循环变量添加内容并检查结果?我有这个简单的代码:

<?php
for ($i=0; $i<5; $i++) {
    echo "Time: " . $i + 1 . "<br/>";
}
?>

页面中显示的结果:

1
1
1
1
1

但是如果没有加1,结果是正确的。这个加法怎么做?

4

8 回答 8

1

虽然添加括号以赋予加法更高的优先级是一种选择,但最简单的方法是$i + 1转换为表达式,解析为奇异值,然后echo使用逗号将其传递给 :

for ($i=0; $i<5; $i++)
{
    echo "Time: " , $i + 1 , "<br/>";
}

但写这个的最短方法是:

for ($i=0;$i<5;)//don't increment here
{
    echo 'Time: ', ++$i, '<br/>';//increment here, and make sure to pre-increment
}

或者,更具可读性(恕我直言,因此更好):

for($i=1;$i<6;$i++)
{//start with one, so you needn't increment in the loop body!
    echo 'Time: ', $i, '<br/>';
}

省略连接稍微快一点,但你几乎不会注意到这一点。这只是一个替代方案。把这两个选项想象成这样(如果你熟悉 C++):

int i = 0;
std::stringstream toPrint;//create string-stream
toPrint << "Time: " << ++i << "<br/>";//pass substrings/int chunks to stream
std::COUT << toPrint.str();//create single string, and pass to output-stream

但这很愚蠢,考虑到您实际上是在创建一个流,只是将您的子字符串/整数传递给,只是将结果字符串传递给输出流。您不妨将所有块直接传递给输出流:

std::<COUT << "Time: " << ++i << "<br/>"; //pass string, int and string to output

echo其视为一种语言结构(它是),它是您对流的访问点STDOUT。手动连接字符串时,您可以按原样将其传递给流吗?没有任何开销?


顺便说一句,您只需 2 行代码即可获得所需的输出,而无需(显式)循环和递增变量:

$vals = range(1,5);//create array 1, 2,3, 4, 5
//repeat format Time: %d<br/> for every index in $vals
vprintf(str_repeat('Time: %d <br/>', count($vals)), $vals);
//pass resulting format to vprintf, allong with the array of values

输出是一样的。如果你正在考虑使用这个:不要。这只是为了好玩,以及如何将压缩代码做得有点过头的示例

于 2013-09-05T07:24:51.243 回答
1

更改此行:

echo "Time: " . $i + 1 . "<br/>";

对此:

echo "Time: " . ($i + 1) . "<br/>";
于 2013-09-05T07:21:05.200 回答
1

将计算放在括号中:

<?php
for ($i=0; $i<5; $i++) {
    echo "Time: " . ($i + 1) . "<br/>";
}
?>
于 2013-09-05T07:21:08.980 回答
1

你在你的问题中使用这个:

<?php
for ($i=0; $i<5; $i++) {
    echo "Time: " . ($i + 1) . "<br/>";
}
?>
于 2013-09-05T07:21:49.403 回答
0
<?php
for ($i=1; $i <= 5; $i++) {
    echo "Time: " . ($i) . "<br />";
}
于 2013-09-05T07:24:02.683 回答
0

你正在寻找做这样的事情:

<?php
for ($i=0; $i<5; $i++) {
    $j=$i+1;
    echo "Time: " . $j . "<br/>";
}
?>
于 2013-09-05T07:24:03.757 回答
0

就像 DanFromGermany 建议的那样,为什么不从 $i 比现在高一开始呢?

此外,如果您必须进行计算,则 var 的含义通常与其起点不同。因此,为了可读性和可重用性,请按照 Munjal 的建议进行,但忽略连接;

<?php

for ($i=0; $i<5; $i++) {
    $laterTime = $i + 1;
    echo "Time: {$laterTime} <br />\n";
}

?>
于 2013-09-05T07:33:03.387 回答
-1
<?php
for ($i=0; $i<5; $i++) {
$i++;
echo "Time: ".$i. "<br/>";
}
?>

或者如果你坚持串联

<?php
for ($i=0; $i<5; $i++) {
echo "Time: " .++$i. "<br/>";
}
?>
于 2013-09-05T07:32:00.303 回答