我确实搜索了stackoverflow和其他地方来解决我的问题,但没有一个能帮助我解决它。
在我的while循环中,$ myvariable的print_r()输出以下数组:
Array
(
[1] => 0000890233330000000000000000000000000000000000000000000001b3165721010000000000
)
Array
(
[1] => 00008a0233330000000000000000000000000000000000000000000001d5165721000000000000
)
Array
(
[1] => 00008b023333000000000000000000000000000000000000000000000109175721000000000000
)
Array
(
[1] => 00008f0233340000000000000000000000000000000000000000000001ad185721000000000000
)
Array
(
[1] => 00009002333500000000000000000000000000000000000000000000018d195721000000000000
)
我使用以下代码取出
$id = substr($myvariable[1], 6, 8);
$cid = hex2bin($id);
$rid = intval(str_replace("\0", '', $cid));
以较短的方式:
$rid = intval( str_replace("\0", '', hex2bin( substr($myvariable[1], 6, 8) ) ) );
我期望所有5个阵列都得到整数33,除了最后2个是34和35但是我得到零(0)。不使用intval()
,没关系。我正在测试(int)
,我得到了相同的零(0)。所以我最终没有使用intval
/ (int)
。虽然输出对我来说是一个真实的数字,但我真的很感激,如果你可以帮助我将这些转换为php将它们理解为真正的整数。感谢。
答案 0 :(得分:2)
让我们一步一步:
$id = "02333300";
$cid = hex2bin($id);
现在$cid
包含以下4个字符:
\02
3
3
\0
然后我们删除\0
字符,因此它包含:
\02
3
3
当我们调用intval($cid)
时,它会开始解析字符串,当它到达第一个不是数字的字符时停止。在这种情况下,这是第一个字符,因为它是\02
。由于它没有读取任何数字,因此返回0
。
在调用intval()
之前,您需要更改代码以删除所有非打印字符。
$rid = preg_replace('/[\0-\31]/', '', $cid);
应该这样做。