因此,根据文档,如果我在intval()中放入一个字符串,它应该返回所述字符串的整数。但是,当我给它一个字符串值为数字的变量时,它会吐出"0",而不是相应的数字。
这段代码是我编写的,我试图将网站存档部分的图像页码转换为标题。
<?php
$filename = basename($_SERVER['REQUEST_URI']);
function countDigits($str) {
$numDigits=0;
for ($i=0; $i < strlen($str); $i++) {
if (is_numeric($str[$i])) {
$numDigits++;
}
}
return $numDigits;
}
$digits = countDigits($filename);
$thisPageNum = intval(substr($filename, -$digits, $digits), 10);
if ($thisPageNum = 0) {
echo '<title>Unfetched Page #</title>';
}
else {
echo '<title>Archive: Page ' . $thisPageNum . '</title>';
}
?>
因此,试图找到这个问题表明,intval返回的是0,而不是适当的数字。为了澄清,为该测试获取的页面名称最终为:archive.php?p=2
,数字(1)被正确计数,子字符串(2)被正确提取。此外,结尾的if语句检查$thisPageNum=0是否未触发并给出错误消息。它总是发出Else回声(返回档案:第0页)。
所以我想我有三个问题。我是不是完全误解了intval()的工作原理?这不是一种做str2int的方式吗?有没有其他方法可以实现我所要求的str2int结果?
免责声明:我已经扰乱php大约24小时了。如果你开始陷入一堆疯狂的事情中,比如get,请解释他们在做什么,因为我可能不理解,我不喜欢使用我不理解的代码。谢谢,:)
编辑:我通过在这里打字纠正了我犯的愚蠢的小错误。这两个错误实际上并不存在。
我认为您通常缺少更简单的方法。所以我认为你在调用archive.php?p=2
,并试图解析出p
的值?
所以,欢迎使用PHP,以及更简单的方法$_GET
。
$thisPageNum = (int)$_GET['p'];
为了解释这一点,$_GET
是一个全局数组,它包含所有查询字符串引用的值。(int)
是在PHP中进行类型转换的方式。因此$thisPageNum
将始终包含一个整数。这应该能更好地满足你的需求。
您的代码中有几个错误:
function countDigits($str) {
$numDigits=0;
for ($i=0; $i < strlen($str); $i++) {
if (is_numeric($str[i])) {//<- should be $i, not i
$numDigits++;
}
}
return $numDigits;
}
第二个错误:
$digits = countDigits();//function called without any inputs
我更正了你的代码,并用示例数据运行了它:
<?php
function countDigits($str) {
$numDigits=0;
for ($i=0; $i < strlen($str); $i++) {
if (is_numeric($str[$i])) {
$numDigits++;
}
}
return $numDigits;
}
$str = "archive.php?p=2";
$digits = countDigits($str);
$thisPageNum = intval(substr($str, -$digits, $digits), 10);
print $thisPageNum;
输出:
2