为什么intval()在这里返回0?

时间:2013-12-02 03:19:41

标签: php web

因此,基于文档,如果我在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)被正确获取。此外,检查$ thisPageNum = 0的结尾的if语句是否未触发并给出错误消息。它总是给出Else回声(返回档案:第0页)。

所以我想我在这里有三个问题。我误解了intval()是如何完全工作的吗?这不是str2int的一种方式吗?是否有不同的方法来实现我需要的str2int结果?

免责声明:我已经在使用php大约24小时了。如果你开始在一堆像疯了似的疯狂事情中滑倒,请解释他们正在做什么,因为我可能不理解,我不喜欢使用我不理解的代码。谢谢,:))

编辑:我在这里输入了这个,修复了我犯的愚蠢小错误。这两个错误实际上并不存在。

2 个答案:

答案 0 :(得分:1)

您的代码中有几个错误:

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

答案 1 :(得分:1)

我认为你错过了一般的简单方法。所以我认为你在调用archive.php?p=2并尝试解析p的价值?

所以,欢迎使用PHP,以及更简单的方法,$_GET

$thisPageNum = (int)$_GET['p'];

因此,为了解释这一点,$_GET是一个全局数组,其中包含所有查询字符串引用的值。 (int)是你在PHP中进行类型转换的方式。所以$thisPageNum总是包含一个整数。这应该可以更好地满足您的需求。