为何先将数据转为整数再转字符串?结果恒为字符串类型的0
关于这段类型转换代码的分析
首先你对代码执行顺序的理解是对的:(string) intval($data[$this->config->item('rest_status_field_name')])确实是先通过intval()把目标值转为整数,再强制转换为字符串类型。
这么写的常见原因
这么做一般是为了确保最终得到的是纯数字组成的字符串,过滤掉非数字的干扰内容:
- 如果原字段值是字符串形式的数字(比如
"200"、"404"),转成int再转回string可以去掉可能的前后空格、非数字后缀(比如"200ok"会被转成"200"); - 如果原字段是布尔值,
true会被转成"1",false转成"0",统一成数字字符串格式; - 本质是做一次“强类型归一化”,不管原数据是什么类型,最终输出都是整数对应的字符串形式。
为什么结果总是字符串"0"
问题出在intval()的输入值上:
- 如果
$data[$this->config->item('rest_status_field_name')]对应的字段不存在于$data数组,会取到null,intval(null)返回0; - 如果字段值是非数字类字符串(比如
"error"、空字符串"")、数组/对象这类无法解析为整数的类型,intval()都会返回0,再转成字符串就是"0"; - 你可以先打印一下
$data[$this->config->item('rest_status_field_name')]的实际值,就能定位到根源。
内容的提问来源于stack exchange,提问作者dekalog
相关产品推荐
相关产品推荐

