Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

php - sort an array by key to match another array's order by key

I have two arrays, both have the same keys (different values) however array #2 is in a different order. I want to be able to resort the second array so it is in the same order as the first array.

Is there a function that can quickly do this?

like image 690
Joe Avatar asked Sep 09 '12 11:09

Joe


People also ask

How do you sort an array according to another array in PHP?

PHP - Sort Functions For Arraysrsort() - sort arrays in descending order. asort() - sort associative arrays in ascending order, according to the value. ksort() - sort associative arrays in ascending order, according to the key. arsort() - sort associative arrays in descending order, according to the value.

How do you sort an array of associative arrays by the value of a given key in PHP?

The arsort() function sorts an associative array in descending order, according to the value. Tip: Use the asort() function to sort an associative array in ascending order, according to the value. Tip: Use the krsort() function to sort an associative array in descending order, according to the key.

How do you sort an array by key value?

To PHP sort array by key, you should use ksort() (for ascending order) or krsort() (for descending order). To PHP sort array by value, you will need functions asort() and arsort() (for ascending and descending orders).


2 Answers

I can't think of any off the top of my head, but if the keys are the same across both arrays then why not just loop over the first one and use its key order to create a new array using the the values from the 2nd one?

$arr1 = array(
    'a' => '42', 
    'b' => '551',
    'c' => '512',
    'd' => 'gge',
) ;


$arr2 = array(
    'd' => 'ordered',
    'b' => 'is',
    'c' => 'now',
    'a' => 'this', 
) ;

$arr2ordered = array() ;

foreach (array_keys($arr1) as $key) {
    $arr2ordered[$key] = $arr2[$key] ;
}
like image 109
Fanis Hatzidakis Avatar answered Oct 04 '22 22:10

Fanis Hatzidakis


You can use array_replace

$arr1 = [
    'x' => '42', 
    'y' => '551',
    'a' => '512',
    'b' => 'gge',
];


$arr2 = [
    'a' => 'ordered',
    'x' => 'this',
    'y' => 'is',
    'b' => 'now',
];

$arr2 = array_replace($arr1, $arr2);

$arr2 is now

[
    'x' => this,
    'y' => is,
    'a' => ordered,
    'b' => now,

]
like image 35
leninzprahy Avatar answered Oct 04 '22 20:10

leninzprahy