首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP型杂耍减缩运算符

问PHP型杂耍减缩运算符
EN

Stack Overflow用户
提问于 2015-11-19 06:50:06
回答 1查看 58关注 0票数 0

我正在使用PHP中的for-loop和CLI。我对递减运算符有异议(--)。下面是我的代码,

代码语言:javascript
复制
<?php

    $handle = fopen("php://stdin","r");
    $str = fgets($handle);
    for($i=$str; $i>0; $i--){   
        var_dump($i);
    }

对于任何数> 0,它进入无限循环。下面是输出,

代码语言:javascript
复制
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的参数,它就能工作,

代码语言:javascript
复制
<?php

    $handle = fopen("php://stdin","r");
    $str = (int)fgets($handle);
    for($i=$str; $i>0; $i--){   
        var_dump($i);
    }

输出

代码语言:javascript
复制
john@doe:/var/www/html/rank$ php 1.php
3
int(3)
int(2)
int(1)
john@doe:/var/www/html/rank$

我是不是做错了什么或打字杂耍不起作用与递减运算符(故意)?如下所示,增量运算符(++)工作正常

代码语言:javascript
复制
<?php

    $handle = fopen("php://stdin","r");
    $str = fgets($handle);
    for($i="1"; $i<=$str; $i++){    
        var_dump($i);
    }

输出

代码语言:javascript
复制
john@doe:/var/www/html/rank$ php 1.php
3
string(1) "1"
int(2)
int(3)
john@doe:/var/www/html/rank$
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-19 07:18:40

您从文件中获得的$str中有一个行中断:

代码语言:javascript
复制
string(2) "3
"

因此,字符串的ascii字符是#51 (dec )。字符“3”和#10 (12月)的ASCII代码。行输入的ASCII代码)。如果使用递减运算符i--,则字符串将更改为#51#09。下一次迭代将将其更改为#51#08。

第一个字符不会更改,因为第二个字符将减少。这就是为什么看起来没有减少的原因。

解决方案:

如果你改变了

代码语言:javascript
复制
$str = fgets($handle);

至

代码语言:javascript
复制
$str = trim(fgets($handle));

行提要、制表符等将被移除到减量运算符将减少字符#51。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33797051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档