我正在使用PHP中的for-loop和CLI。我对递减运算符有异议(--)。下面是我的代码,
<?php
$handle = fopen("php://stdin","r");
$str = fgets($handle);
for($i=$str; $i>0; $i--){
var_dump($i);
}对于任何数> 0,它进入无限循环。下面是输出,
john@doe:/var/www/html/rank$ php 1.php
3
string(2) "3
"
string(2) "3
"
string(2) "3
"
string(2) "3
"
string(2) "3
"
string(2) "3
"但是,如果我显式地向int输入类型为cli的参数,它就能工作,
<?php
$handle = fopen("php://stdin","r");
$str = (int)fgets($handle);
for($i=$str; $i>0; $i--){
var_dump($i);
}输出
john@doe:/var/www/html/rank$ php 1.php
3
int(3)
int(2)
int(1)
john@doe:/var/www/html/rank$我是不是做错了什么或打字杂耍不起作用与递减运算符(故意)?如下所示,增量运算符(++)工作正常
<?php
$handle = fopen("php://stdin","r");
$str = fgets($handle);
for($i="1"; $i<=$str; $i++){
var_dump($i);
}输出
john@doe:/var/www/html/rank$ php 1.php
3
string(1) "1"
int(2)
int(3)
john@doe:/var/www/html/rank$发布于 2015-11-19 07:18:40
您从文件中获得的$str中有一个行中断:
string(2) "3
"因此,字符串的ascii字符是#51 (dec )。字符“3”和#10 (12月)的ASCII代码。行输入的ASCII代码)。如果使用递减运算符i--,则字符串将更改为#51#09。下一次迭代将将其更改为#51#08。
第一个字符不会更改,因为第二个字符将减少。这就是为什么看起来没有减少的原因。
解决方案:
如果你改变了
$str = fgets($handle);至
$str = trim(fgets($handle));行提要、制表符等将被移除到减量运算符将减少字符#51。
https://stackoverflow.com/questions/33797051
复制相似问题