Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sort array using another array

Tags:

php

I have an array of products and i want to sort them with another array.

$products = array(
  0 => 'Pro 1',
  1 => 'Pro 2',
  2 => 'Pro 3'
);

$sort = array(1,2,0);

array_multisort($products, $sort);

Array should now be ...

$products = array(
  0 => 'Pro 2',
  1 => 'Pro 3',
  2 => 'Pro 1'
);

I don't seem to be using array_multisort correctly. Ive tried different ways for 2 hours now...

like image 744
tuurbo Avatar asked Feb 02 '23 09:02

tuurbo


2 Answers

It seems like this is more appropriate than a sort:

$products = array_map(function($i) use ($products) {
   return $products[$i];
}, $sort);
like image 107
Matthew Avatar answered Feb 05 '23 18:02

Matthew


array_multisort sorts the 2nd array and applies the sorting order to the 1st one. To do your job the sorting array has to be $sort = array(2,0,1); (implies: bring 2nd element to 0, 3rd element to 1 and 1st element to 2).

You simply can use

foreach ($sort as $key) {
    $sorted_products[] = $products[$key];
}
like image 30
DerVO Avatar answered Feb 05 '23 18:02

DerVO