Sorting an array using a custom key in PHP

I have an array of one structure as shown below

$array1 = array(
[123] => array('1'=>'1','2'=>'3'),
[345] => array('1'=>'3','2'=>'5'),
[789] => array('1'=>'1','2'=>'5'),
[567] => array('1'=>'6','2'=>'5'),
);

and another array structure as $array2 = array(567,345,789,123);

Now I want to sort this file using the php sort function, I mean sorting the first array with the second so that it looks like the desired result. below

$array1 = array(
[567] => array('1'=>'6','2'=>'5'),
[345] => array('1'=>'3','2'=>'5'),
[789] => array('1'=>'1','2'=>'5'),
[123] => array('1'=>'1','2'=>'3'),
);

I want to get this desired result with any sort function that already exists.

Thank.

+4
source share
2 answers

Finish your $array2and fill the third array as follows:

$array1 = array(
    [123] => array('1'=>'1','2'=>'3'),
    [345] => array('1'=>'3','2'=>'5'),
    [789] => array('1'=>'1','2'=>'5'),
    [567] => array('1'=>'6','2'=>'5'),
);

$array2 = array(567,345,789,123);

$orderedArray = array();
foreach ($array2 as $key) {
    $orderedArray[$key] = $array1[$key];
}

And if you want a function:

function orderArray($arrayToOrder, $keys) {
    $ordered = array();
    foreach ($keys as $key) {
        if (isset($arrayToOrder[$key])) {
             $ordered[$key] = $arrayToOrder[$key];
        }
    }
    return $ordered;
}

$myOrderedArray = orderArray($array1, $array2);
+3
source

Or you can use the uksortphp function as

uksort($array1, function($a, $b)use($array2) {
    foreach($array2 as $value){
        if($a == $value){
            return 0;
            break;
        }
        if($b == $value){
            return 1;
            break;
        }
    }
});

Fiddle

+2
source

All Articles