PHP类型杂耍和减量运算符
我正在使用PHP中的PHP类型杂耍和减量运算符,php,type-conversion,decrement,Php,Type Conversion,Decrement,我正在使用PHP中的for循环和CLI。我对减量运算符(--)有问题。下面是我的代码 <?php $handle = fopen("php://stdin","r"); $str = fgets($handle); for($i=$str; $i>0; $i--){ var_dump($i); } 但如果我显式地将cast cli参数键入int,它就可以工作 <?php $handle = fopen("php
for循环
和CLI
。我对减量运算符(--)有问题。下面是我的代码
<?php
$handle = fopen("php://stdin","r");
$str = fgets($handle);
for($i=$str; $i>0; $i--){
var_dump($i);
}
但如果我显式地将cast cli参数键入int
,它就可以工作
<?php
$handle = fopen("php://stdin","r");
$str = (int)fgets($handle);
for($i=$str; $i>0; $i--){
var_dump($i);
}
我是否做错了什么,或者键入杂耍无法使用减量运算符(有意)?因为它似乎可以使用如下所示的增量运算符(++)
从文件中获取的
$str
中有一个换行符:
string(2) "3
"
因此字符串的ascii字符是#51
(12月ascii代码表示字符“3”)和#10
(12月ascii代码表示换行符)。
如果使用减量运算符i--
,字符串将变为#51#09
。下一次迭代将其更改为#51#08
第一个字符不会更改,因为第二个字符将递减。这就是为什么看起来没有递减的原因
解决方案:
如果你改变
$str = fgets($handle);
到
换行符、制表符等将被删除,以使减量运算符减量字符#51
<?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$
string(2) "3
"
$str = fgets($handle);
$str = trim(fgets($handle));