Edit report at http://bugs.php.net/bug.php?id=54734&edit=1
ID: 54734 Updated by: [email protected] Reported by: [email protected] Summary: unpack() forces use of associative arrays Status: Open Type: Feature/Change Request Package: Strings related Operating System: * PHP Version: 5.3.6 Block user comment: N Private report: N New Comment: That has never been true in any PHP version. Right from day one PHP arrays have been ordered and you have always been able to rely on that order. Previous Comments: ------------------------------------------------------------------------ [2011-05-14 07:08:04] [email protected] I was under the impression that it's not safe to depend on the order of values in an associative array, i.e., that array_values(array("a" => "b", "c" => "d")) is free to return array("d", "b") if it likes. Is that untrue in the current engine? And yeah, performance is some question. Especially since I am using unpack for network packets, and the faster the better, though I haven't done any kind of benchmark to see if this is a bottleneck at all. ------------------------------------------------------------------------ [2011-05-14 06:59:05] [email protected] The userland workaround is rather trivial though, isn't it? list(, $value1, $value2) = array_values(unpack("CnCnC", $packet)); array_values() is quick, but I guess your performance worry is the needless creation of the associative array in the first place? ------------------------------------------------------------------------ [2011-05-14 06:41:56] [email protected] Description: ------------ The unpack() function returns only associative arrays. In some situations it's advantageous to work with an indexed array instead. For example, this code, parsing a fictional network packet format: $packet = "\x01\x05\x05\x01\x05\x05\x01"; $values = unpack("Cpadding/nvalue1/Cpadding/nvalue2/Cpadding", $packet); might be more clear when written this way: list(, $value1, , $value2, ) = unpack("CnCnC", $packet); Implementing a fully compatible workaround in userland is at least mildly annoying (as well as slow), and it's pretty simple to add to the engine. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=54734&edit=1
