PHP读取MySQL BLOB并转换为整数数组的技术咨询
把MySQL BLOB字段读取为整数数组(字节替代方案)
你说得对,PHP确实没有原生的字节数据类型,我们通常用0-255范围的整数来表示单个字节,这完全可以满足你的需求。
看你当前的代码,用unpack("H*", $vector)得到的是二进制数据转成的十六进制字符串,这显然不是你想要的整数数组。我们可以换用unpack的另一个格式符来直接得到字节对应的整数数组:
解决方案代码
<?php $mysqli = mysqlConnect(); $query = $mysqli->query("SELECT * FROM vectors LIMIT 2;"); echo "<pre>"; // 用pre标签让输出更整齐 while ($row = mysqli_fetch_assoc($query)) { $date = $row["date"]; // DATETIME字段 $vector = $row["vector"]; // BLOB字段 echo $date . "\t"; // 关键:用C*解包成无符号字节数组(每个元素是0-255的整数) $byteArray = unpack("C*", $vector); // 可选:把数组索引改成从0开始(默认unpack返回的是1起始的索引) $byteArray = array_values($byteArray); var_dump($byteArray); echo "\n"; } echo "</pre>"; ?>
关键说明
unpack("C*", $vector):C是unpack的格式符,代表无符号字符(每个占1字节),*表示处理所有剩余的字节。这样会返回一个数组,每个元素对应BLOB中一个字节的整数值(范围0-255)。- 如果你的BLOB存储的是有符号字节(范围-128到127),可以把
C*换成c*(小写c)。 array_values($byteArray):因为unpack默认返回的数组是从1开始索引的,如果你习惯0起始的数组(像大多数编程语言的字节数组那样),可以用这个函数重新索引。
示例输出
假设你的BLOB字段存储的是字节序列0x01 0x0A 0xFF,那么var_dump会输出:
array(3) { [0]=> int(1) [1]=> int(10) [2]=> int(255) }
这样就完美实现了把BLOB字段读取为整数数组的需求啦。
内容的提问来源于stack exchange,提问作者Kamil
相关产品推荐
相关产品推荐

