当前位置:   article > 正文

PHP解析Cassandra的map类型出现乱码,解决方案_cassandra数据导出中文乱码

cassandra数据导出中文乱码

最近在项目中用到了一个支持多节点存储的nosql数据库Cassandra,由于采集的是服务器运行信息,后端程序在数据入库时,大量使用了map类型。然而我们知道PHP这门语言是不支持map类型的,所以在从socket中获取到数据时,PHP会自动按字符串(string)类型去解析。然后对于大部分map类型的数据,解析出来的结果都会出现乱码,并且难以直接进行处理

如下图:


找了很多Cassandra的PHP类库都没有解决,最后在Stackoverflow上看到某位大神使用PHP进行位运算,从而解决数据类型不兼容的方法。引入过来稍作修改之后,问题解决,成功将被PHP解析为string的map数据,转化为array。

下面附上将map转化为array的代码(可直接使用)

  1. private function cql3_map_to_array($map){
  2. $byte_array = unpack('C*', $map);
  3. $map_array = array();
  4. if(sizeof($byte_array) > 2) {
  5. $pos = 1;
  6. $size = (intval($byte_array[$pos]) * 256) + intval($byte_array[$pos + 1]);
  7. $pos += 2;
  8. while($size > 0){
  9. $length = (intval($byte_array[$pos]) * 256) + intval($byte_array[$pos + 1]);
  10. $pos += 2;
  11. $key = substr($map, $pos - 1, $length);
  12. $pos += $length;
  13. $length = (intval($byte_array[$pos]) * 256) + intval($byte_array[$pos + 1]);
  14. $pos += 2;
  15. $value = substr($map, $pos - 1, $length);
  16. $pos += $length;
  17. $map_array[$key] = $value;
  18. $size--;
  19. }
  20. }
  21. return $map_array;
  22. }

处理过后,数据样式如下图:


再次感谢stackoverflow那位提供demo的无名大神,这里分享出来只为给其他遇到类似问题的朋友提供一点思路。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/126222
推荐阅读
相关标签
  

闽ICP备14008679号