Req #5889 [Wfx]: pack() does not take arrays

From: Date: Fri, 11 Apr 2014 17:31:21 +0000
Subject: Req #5889 [Wfx]: pack() does not take arrays
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-185183@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=5889&edit=1 ID: 5889 Updated by: requinix@php.net Reported by: tomwk at audiogalaxy dot com Summary: pack() does not take arrays Status: Wont fix Type: Feature/Change Request -Package: Feature/Change Request +Package: *General Issues Operating System: Redhat Linux PHP Version: 4.0.1pl2 Block user comment: N Private report: N New Comment: It won't be as described (passing arrays) because there are other ways of doing it. PHP 5.6+ introduces argument unpacking. $buf = pack("N*", ...$data) PHP <5.6 can use call_user_func_array(). $buf = call_user_func_array("pack", array_merge(array("N*"), $data)); Previous Comments: ------------------------------------------------------------------------ [2014-04-11 13:31:47] asakurastar at hotmail dot com When will it be implemented?? ------------------------------------------------------------------------ [2011-03-22 19:00:27] joshua at gmail dot com Yes, it WILL be implemented ------------------------------------------------------------------------ [2004-06-14 10:49:20] magnus@php.net This will not be implemented. ------------------------------------------------------------------------ [2000-08-01 10:22:25] stas@php.net Well, functions args work differently in perl and PHP. Maybe we need some "array" type of pack modifier, because PHP does not convert function arguments to array. Though, you can write a wrapper function using func_get_args() and func_num_args() for this. ------------------------------------------------------------------------ [2000-08-01 09:51:18] tomwk at audiogalaxy dot com I have an application that writes data across our network to another program. Most of the data consists of integer arrays. I'm currently doing this in a very simple manner, using something like this: for( $i = 0; $i < $numInts; $i++ ) { fwrite( $fd, pack( "N", $ints[ $i ] ) ); } However, this results in a very large number of calls to fwrite, which is bad for performance. I made the routine about 3 times faster by doing something like this: fwrite( $fd, pack( "N10" $ints[ $i + 0 ], $ints[ $i + 1 ], $ints[ $i + 2 ], ///.. and so on, However, it would be really great if pack could take an array as one of it's arguments. I believe this is the way Perl behaves, but when I try: $data = array( 10, 123 ); $buf = pack( "N*", $data ); $valArray = unpack( "N*", $buf ); while( list( $key, $val ) = each( $valArray ) ) { echo "$key -> $val\n"; } the only output I get is: 1 -> 1 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=5889&edit=1

« previous php.bugs (#185183) next »