我在网络上随处可见并进行了一些测试,但我仍然无法理解我的代码。
$hcptype_id = $_GET["asdfghjkl"];
$a = 0 + $hcptype_id;
echo $a;
虽然$a
的值为4,但$hcptype_id
生成0。我还尝试了(int)$hcptype_id
但仍然生成0。
编辑
echo $hcptype_id;
echo $_GET["asdfghjkl"];
var_export($_GET["asdfghjkl"]);
产地:
"4"
"4"
'"4"'
再次编辑
var_dump($_GET);
var_dump($hcptype_id);
var_dump($a);
产地:
array(1) { ["asdfghjkl"]=> string(3) ""4"" } string(3) ""4"" int(0)
再次编辑
变量asdfghjkl
来自另一个页面,它是<a href=sc_hcp_type_edit.php?asdfghjkl="'.$row['hcptype_id'].'">
答案 0 :(得分:1)
如果您确定要从$ _GET中检索正确的数据,则不需要添加0。 就这样做:
$hcptype_id = intval(trim($_GET["asdfghjkl"],'"'));
此外,当您将值包装在&#34;中时,我修剪了双引号
答案 1 :(得分:1)
重现您描述的行为的唯一方法是您的假设:
$ hcptype_id的值为4
......不是真的:
var_dump(0 + '4');
var_dump(0 + 4);
var_dump(0 + '04');
var_dump(0 + ' 4');
var_dump(0 + 'foo');
...打印:
int(4)
int(4)
int(4)
int(4)
int(0)
如您所见,var_dump()可用于检查PHP变量(包括类型),var_dump($hcptype_id)
将显示您首先没有4
。来自您更新的问题:
string(3) ""4""
注意:(3)
部分表示我们有3个字节(虽然只有1个字节)。
在此之后,我们可以在您共享的代码之前的某处找到错误。虽然有许多可能的解决办法来修复无效的数字,例如:
$hcptype_id = preg_replace('/\\D+/', '', $_GET["asdfghjkl"]);
...最好的方法是转到源并修复生成原始数据的过程。根据您的描述,根问题似乎是一个名为hcptype_id
的数据库列,至少有两个潜在问题:
答案 2 :(得分:1)
正如您在不同的跟踪中所看到的,有双引号("
)可以防止它被解析为整数。
一种解决方案是使用trim()
删除有问题的字符:$hcptype_id = trim($_GET["asdfghjkl"], '"');
。
答案 3 :(得分:-1)
使用intval将变量转换为int。您不需要0 +
部分。
$a = intval(trim($hcptype_id));