这是一个疯狂的......
我有一个来自$ _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位有关吗?
答案 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