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.