PHP

Reorder an Associative Array by a Specific Key Order

Reorder a PHP associative array of items based on a predefined order of their keys, ensuring elements appear in a desired sequence for display or processing.

<?php
function reorderByKey(array $array, array $orderKeys): array {
    $ordered = [];
    // First, add elements present in the desired order
    foreach ($orderKeys as $key) {
        if (array_key_exists($key, $array)) {
            $ordered[$key] = $array[$key];
            unset($array[$key]); // Remove from original to prevent re-adding
        }
    }
    // Then, add any remaining elements not specified in the order
    // This ensures no data is lost.
    return array_merge($ordered, $array);
}

$data = [
    'itemC' => ['value' => 3, 'name' => 'C'],
    'itemA' => ['value' => 1, 'name' => 'A'],
    'itemD' => ['value' => 4, 'name' => 'D'],
    'itemB' => ['value' => 2, 'name' => 'B'],
];

$desiredOrder = ['itemA', 'itemB', 'itemC']; // itemD will be appended at the end

$reorderedData = reorderByKey($data, $desiredOrder);

// Expected Output:
// Array
// (
//     [itemA] => Array ([value] => 1 [name] => A)
//     [itemB] => Array ([value] => 2 [name] => B)
//     [itemC] => Array ([value] => 3 [name] => C)
//     [itemD] => Array ([value] => 4 [name] => D)
// )
print_r($reorderedData);
?>
How it works: The `reorderByKey` function takes an associative array and an array of keys representing the desired order. It constructs a new array, first adding elements whose keys match the desired order, then appending any remaining elements that were not explicitly listed in the order. This ensures all original data is preserved while achieving the specified sequence.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs