Here's the problem. Let's say you have a collection of arrays, such as:
$a = array();
$b = array();
$c = array();
$d = array();
And then you populate the arrays like so:
$a = ...
$b = ...
$c = ...
$d = ...
Now, let's say you want to sort the $d array, but you also want the
arrays $a, $b, and $c to be arranged in the same resultant order as $d.
For example, please follow this:
Before sort of $d:
$a = [apple, banana, grape, orange]
$b = [100, 2111, 198, 150]
$c = [red, yellow, purple, orange]
$d = [100, 300, 11, 50]
After sort of $d:
$a = [grape, orange, apple, banana]
$b = [198, 150, 100, 2111]
$c = [purple, orange, red, yellow]
$d = [11, 50, 100, 300]
Is there a slick way to do that?
function tedd_sort( &$arrays )
$master = null;
$followers = array();
$first = true;
foreach( array_keys( $arrays ) as $key )
if( $first )
$first = false;
$master = &$arrays[$key];
$followers = &$arrays[$key];
asort( $master );
foreach( array_keys( $master ) as $mkey )
foreach( array_keys( $followers ) as $fkey )
$value = &$followers[$fkey][$mkey];
unset( $followers[$fkey][$mkey] );
$followers[$fkey][$mkey] = &$value;
$a = array( 'apple', 'banana', 'grape', 'orange' );
$b = array( 100, 2111, 198, 150 );
$c = array( 'red', 'yellow', 'purple', 'orange' );
$d = array( 100, 300, 11, 50 );
$arrays = array( &$d, &$a, &$b, &$c );
tedd_sort( $arrays );
print_r( $a );
print_r( $b );
print_r( $c );
print_r( $d );
If func_get_args() or func_get_arg() had supported retrieving a
reference to the argument, then we could have saved having to pass the
arrays via a combined array. I chose to make $d the first array since in
your example result set it is the one sorted and thus the rest follow as
you would expect.
Application and Templating Framework for PHP
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php