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

Reply via email to