force msgpack_pack treat empty array as a map
Hello, when use msgpack_pack() to pack an empty array, it is always treated as an array, but sometimes we want it to be treated as an empty map, just like what JSON_FORCE_OBJECT does for json_encode(). Does msgpack_pack() has options like this?
Thanks you.
I have a similar issue. While implementing a client for 3d party binary protocol which utilizes msgpack, I run into a problem that I need to send php indexed array as MP map, but msgpack_pack() serializes such arrays to MP array. So it would be nice to have a possibility to specify a type of the data to be serialized, e.g.:
msgpack_pack([0 => 'foo', 1 => 'bar'], MessagePack::MAP);
// or
msgpack_pack_map([0 => 'foo', 1 => 'bar']);
Hello, will this feature be supported in future? thanks!
Hi @zhangbiao2009 !
Let me check the other msgpack implementations, this may be out of scope. I get this is really useful, but you can just walk the returned structure and transform as needed. I just don't want to add needless complexity.
thanks for taking time to file this!
For the record, in PDOStatement::bindValue() one can pass an optional 3d parameter with explicit data type, e.g.:
$stmt->bindValue(':foo', $foo, PDO::PARAM_INT);
So, for msgpack_pack() it may look like:
msgpack_pack([1, 2]); // will pack it to MP_ARRAY
msgpack_pack([1, 2], Msgpack::TYPE_MAP);
msgpack_pack([1, 2], Msgpack::TYPE_ARR);
msgpack_pack('42'); // will pack it to MP_STR
msgpack_pack('42', Msgpack::TYPE_INT);
msgpack_pack('2.4'); // will pack it to MP_STR
msgpack_pack('2.4', Msgpack::TYPE_FLOAT);