php - 字符串到int不能正常工作,只产生零

时间:2016-05-30 16:40:40

标签: php

我在网络上随处可见并进行了一些测试,但我仍然无法理解我的代码。

$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'].'">

4 个答案:

答案 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)

Demo

如您所见,var_dump()可用于检查PHP变量(包括类型),var_dump($hcptype_id)将显示您首先没有4 。来自您更新的问题:

  

string(3) ""4""

注意:(3)部分表示我们有3个字节(虽然只有1个字节)。

在此之后,我们可以在您共享的代码之前的某处找到错误。虽然有许多可能的解决办法来修复无效的数字,例如:

$hcptype_id = preg_replace('/\\D+/', '', $_GET["asdfghjkl"]);

...最好的方法是转到源并修复生成原始数据的过程。根据您的描述,根问题似乎是一个名为hcptype_id的数据库列,至少有两个潜在问题:

  1. 它有文本列类型而不是数字列
  2. 填充它的过程会添加虚假引号

答案 2 :(得分:1)

正如您在不同的跟踪中所看到的,有双引号(")可以防止它被解析为整数。

一种解决方案是使用trim()删除有问题的字符:$hcptype_id = trim($_GET["asdfghjkl"], '"');

答案 3 :(得分:-1)

使用intval将变量转换为int。您不需要0 +部分。

$a = intval(trim($hcptype_id));