在下面的代码中,$counter
变量是类型转换,用于按照此行$counter=(int)fread($fp, 20);
存储整数,然后使用strlen($counter)
。我的意思是,strlen返回一个字符串的长度,但$counter
现在已经是一个整数变量。 substr($ counter,$ i,1)也是如此。该程序给出了所需的结果,只是我理解如上所述。
$counter_file = "./count.txt";
$img_dir="./img";
if(!($fp=fopen($counter_file, "r"))) die ("Could not find $counter_file");
$counter=(int)fread($fp, 20);
fclose($fp);
$counter++;
for ($i=0; $i<strlen($counter); $i++){
$img_src = $img_dir."/".substr($counter, $i,1).".jpg";
$img_tag_str .="<img src= \"$img_src\" border=\"0\">";
}
echo "You are visitor no. $img_tag_str.";
$fp=fopen($counter_file, "w");
fwrite($fp, $counter);
fclose($fp);
Regrds, 安瑟尼。
答案 0 :(得分:2)
如果将整数传递给strlen
方法,则将此整数强制转换为字符串。
所以strlen(23)
会给2
; strlen(1234)
将4
。
为什么你需要这个?例如,要知道数字中的位数。即使它可能不是最佳方式。
这就是示例代码中发生的情况。 $counter
变量从文件加载。强制转换为整数确保这是一个实数,而不是一些随机的东西¹。然后,循环用于遍历每个数字,并显示具有该数字的图像。这就解释了为什么我们需要strlen
和substr
整数。
¹为什么随机的东西在这里不好?想象一下,当你期望一个数字时,文件中的数据是“Abc”。循环将输出如下内容:
<img src="img/A.jpg" alt="" />
<img src="img/b.jpg" alt="" />
<img src="img/c.jpg" alt="" />
由于您没有A.jpg
,b.jpg
或c.jpg
,因此不会显示任何内容。
答案 1 :(得分:1)
即使$ counter是一个整数,某些需要字符串的函数也可以将其视为一个整数。如果$ counter = 125,则strlen($ counter)会看到strlen('125')并给出正确的3结果。
该函数将传递给的值转换为字符串,但原始文件不会更改。
答案 2 :(得分:1)
$ counter被强制转换为int,因此$ counter ++将执行一个简单的整数增量。像strlen($ counter)这样的函数在返回长度
之前隐式地将$ counter值强制转换为字符串