protected function ConfigSorter::sortDeep in Configuration Split 2.0.x
Sort one array with the sorting order of another.
Parameters
array $config: The array to sort.
array $model: The array to get the sorting order from.
Return value
array The sorted array.
1 call to ConfigSorter::sortDeep()
- ConfigSorter::sort in src/
Config/ ConfigSorter.php - Cast and sort the config data in a normalised way depending on its schema.
File
- src/
Config/ ConfigSorter.php, line 152
Class
- ConfigSorter
- The config sorter service core should have had.
Namespace
Drupal\config_split\ConfigCode
protected function sortDeep(array $config, array $model) : array {
if ($config === $model) {
// Shortcut.
return $config;
}
$sorted = [];
$common = array_intersect_key($model, $config);
$unique = array_diff_key($config, $model);
foreach ($common as $key => $modelValue) {
$value = $config[$key];
// We maybe need to differentiate between mappings and sequences, use the
// config schema and all. But as long as core doesn't give us any help we
// just sort in the most crude way to get the job done.
if (is_array($modelValue) && is_array($value) && !empty($value)) {
// Recurse into nested values.
$value = $this
->sortDeep($value, $modelValue);
}
// Fill the $sorted array in the same order as the model.
$sorted[$key] = $value;
}
foreach ($unique as $key => $value) {
// The values that do not exist in the model do not need to be sorted.
$sorted[$key] = $value;
}
return $sorted;
}