PHP $ _GET变量在函数中不起作用,除非它是硬编码的?

时间:2017-11-04 04:17:19

标签: php get

这是一个疯狂的......

我有一个来自$ _GET请求的var。回声很好,但无论我做什么,我都不能将它传递给函数而不用硬编码值。

$txAmount = strip_tags($_GET['amt']);

回显$ txAmount会返回以下内容:23.28684804(应该如此)

// Running some validation to ensure it's only digits and a period
if(preg_match_all('/^[0-9,.]*$/', $txAmount) && strpos($txAmount, '.') !== false) {

// then some other functions run, nothing that uses or affects $txAmount 

// Then I call a class to run the function, all other variables being passed in are working fine
$findTX = $client->findTx($payment_address, $txAmount, $listTransactions);

// This is the function
function findTx($address, $txAmount, $array)
    {
        foreach ($array as $key => $val) {
            if ($val['address'] === $address && $val['amount'] === $txAmount) {

                return $val['txid'];
            }
        }
        return null;
    }

这就是它出现的地方......

它只是拒绝将$ txAmount与$ val ['amount']匹配,即使它们完全相同并且应该返回true。

我能使其工作的唯一方法是对值进行硬编码(脚本中的任何其他位置)所有这些都可以正常工作:

$txAmount = 23.28684804;

$findTX = $client->findTx($payment_address, 23.28684804, $listTransactions);

if ($val['address'] === $address && $val['amount'] === 23.28684804)

我甚至尝试修剪变量,以防万一有隐藏的空白但仍然没有喜悦:

$txAmount = trim($txAmount);

我只是在这里生气还是有一些疯狂的怪癖,PHP只是讨厌这个变量?可能与小数点后8位有关吗?

1 个答案:

答案 0 :(得分:0)

简单回答,在findTx函数if条件中,使用$val['amount'] == $txAmount代替$val['amount'] === $txAmount

原因:在PHP中,===要求被比较的两个值具有相同的类型,而==将尝试忽略类型差异。您可以使用gettype()检查txAmount$val['amount']的类型。当$txAmount来自$_GET时,类型可能会有所不同,与===进行比较会要求您找到将它们转换为相同类型的方法 - 如评论中所示或使用类型转换运算符,如$txAmount = (float) $txAmount

但是,使用==,PHP会理解所比较的内容,在这种情况下,从===更改为==比使用详细信息更容易不同的数据类型,因为这只是一种不以任何方式改变数据的比较操作。

您可能会发现以下有关PHP数据类型的参考资料:http://php.net/manual/en/language.types.type-juggling.php