I have an array of $Percentages1
that I have ordered in descending order using arsort()
and then I have taken an array containing the new key order using array_keys()
called $keyorder
My question is how do I now rearrange another array $Percentages2
into the same key order as $Percentages1
?
Any help will be greatly appreciated, thanks very much!
Edit - Code as requested:
//$Percentages1 before sort for example =
// Array ( [0] => 5.10 [1] => 1.52 [2] => 8.42 [3] => 1.11 [4] => 1.35 )
arsort($Percentages1);
//$Percentages1 after sort =
// Array ( [2] => 8.42 [0] => 5.10 [1] => 1.52 [4] => 1.35 [3] => 1.11 )
$keyorder = array();
//So $keyorder is =
// Array ( [0] => 2 [1] => 0 [2] => 1 [3] => 4 [4] => 3 )
$keyorder = array_keys($Percentages1);
//Now I want to do something here to rearrange a $Percentages2 array
//in the same index order as $keyorder.
//For example from this
// Array ( [0] => 2.50 [1] => 3.52 [2] => 9.42 [3] => 9.81 [4] => 0.35 )
//To...
// Array ( [2] => 9.42 [0] => 2.50 [1] => 3.52 [4] => 0.35 [3] => 9.81 )
If you are not adverse to creating another array variable, the simplest course here is just to loop over $keyorder
and append the elements at the corresponding key from $Percentages2
onto a new array;.
// Sorted as you already have it...
$keyorder = array_keys($Percentages1);
// Final array
$output = array();
foreach ($keyorder as $key) {
$output[$key] = $Percentages2[$key];
}
// Don't need the source anymore
unset($Percentages2);
Their key order as appended onto $output
will be retained in the final result.
Given your input arrays, this produces
print_r($output);
Array
(
[2] => 9.42
[0] => 2.5
[1] => 3.52
[4] => 0.35
[3] => 9.81
)
You actually don't need to use array_keys()
. Following the call to arsort()
, you can foreach
over the sorted $Percentages1
and sort to $output
by key:
// Skip array_keys, and read the sorted array directly
arsort($Percentages1);
foreach ($Percentages1 as $key => $value) {
// Same as before inside the loop
$output[$key] = $Percentages2[$key];
}