Req #63577 [Com]: Array invert or Array transpose (two dimensional)

From: Date: Wed, 21 Nov 2018 04:18:09 +0000
Subject: Req #63577 [Com]: Array invert or Array transpose (two dimensional)
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-218070@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=63577&edit=1 ID: 63577 Comment by: a at b dot c dot de Reported by: tagg_maiwald at yahoo dot com Summary: Array invert or Array transpose (two dimensional) Status: Open Type: Feature/Change Request Package: Arrays related PHP Version: Irrelevant Block user comment: N Private report: N New Comment: $testarray = array_map('str_split', ['ABC', 'DEF', 'GHI']); $transpose = array_map(null, ...$testarray); var_dump($transpose); Previous Comments: ------------------------------------------------------------------------ [2012-11-22 04:01:02] tagg_maiwald at yahoo dot com Description: ------------ Two dimensional array inversion or transposition task is granular enough that it should be included as a PHP array_(name) function, instead of forcing scripters to "re-invent the wheel." "array_invert" and "array_transpose" are two names which seem natural for this. Test script: --------------- <?php function f_ary_trans_rc( $ary ) { $ret_ary = Array( ) ; foreach( $ary as $k_row => $ary_col ) { foreach( $ary_col as $k_col => $v_node ) { $ret_ary[ $k_col ][ $k_row ] = $v_node ; } } return $ret_ary ; } function f_ary_out( $ary ) { $sz_ret = '' ; foreach( $ary as $k_row => $ary_col ) { foreach( $ary_col as $k_col => $v_node ) { $sz_ret .= $v_node ; } $sz_ret .= "\n" ; } return $sz_ret ; } $ary_test = Array ( 'abc', 'def', 'ghi', '123', '456', '789' ) ; $ary_before = Array( ) ; foreach( $ary_test as $key => $value ) { $value = trim( $value ) ; $value = strtoupper( $value ) ; $ary_before[ ] = str_split( $value ) ; } echo '$ary_before:' . "\n" ; echo f_ary_out( $ary_before ) ; print_r( $ary_before ) ; $ary_after = f_ary_trans_rc( $ary_before ) ; echo "\n\n" . '$ary_after:' . "\n" ; echo f_ary_out( $ary_after ) ; print_r( $ary_after ) ; ?> Expected result: ---------------- Row and column indices of the returned array will be inverted/transposed from that of the parameter array, with corresponding movement of the referenced nodes/values. Actual result: -------------- $ary_before: ABC DEF GHI 123 456 789 Array ( [0] => Array ( [0] => A [1] => B [2] => C ) [1] => Array ( [0] => D [1] => E [2] => F ) [2] => Array ( [0] => G [1] => H [2] => I ) [3] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [4] => Array ( [0] => 4 [1] => 5 [2] => 6 ) [5] => Array ( [0] => 7 [1] => 8 [2] => 9 ) ) $ary_after: ADG147 BEH258 CFI369 Array ( [0] => Array ( [0] => A [1] => D [2] => G [3] => 1 [4] => 4 [5] => 7 ) [1] => Array ( [0] => B [1] => E [2] => H [3] => 2 [4] => 5 [5] => 8 ) [2] => Array ( [0] => C [1] => F [2] => I [3] => 3 [4] => 6 [5] => 9 ) ) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=63577&edit=1

« previous php.bugs (#218070) next »