Итак, у нас есть:

$sortedKeys = ['a', 'b', 'c', 'd'];

$arr = [
    'd' => 56,
    'a' => 21,
    'b' => 0,
    'c' => 17
]; 

Главный факт в том, что ничего сортировать не нужно. Мы просто берем первый массив в качестве основы и заполняем его значениями из другого. Ну а как это сделать - тут уже на наше усмотрение, в качестве примера я нашел 3 способа, два взял первые пришедшие в голову, третий - нашел на форуме.

// Example #1 - Для обывателей
$result1 = [];
foreach($sortedKeys as $key) {
    $result1[$key] = $arr[$key];
}

// Example #2 - Если ну прям надо в функциональщину
$result2 = array_reduce($sortedKeys, function($res, $item) use ($arr) {
    return array_merge($res, [$item => $arr[$item]]);
}, []);

// Example #3 - Ход конем
$result3 = array_merge(array_flip($sortedKeys), $arr);

Во всех трех случаях получаем одно и то же:

Array
(
    [a] => 21
    [b] => 0
    [c] => 17
    [d] => 56
)