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位有什么关系?
简单的回答,在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
尝试打印使用'的var_dump($ txAmount)'变量。也许这是一个对象?如果是这样,尝试将其转换为浮动? (例如'floatval($ txAmount)== floatval($ val ['amount'])' –
啊,我们正在某处......它倾倒了字符串(11)“23.28684804”'但在我要搜索的数组中它被标记为'float(23.28684804)'。我怎样才能改变$ txAmount的格式来使它工作? – user3717922
使用'floatval'。我给出了上面的例子。 –