function ModuleWeight::sort
Sorts the configured list of enabled modules.
The list of enabled modules is expected to be ordered by weight and name. The list is always sorted on write to avoid the overhead on read.
Parameters
array $data: An array of module configuration data.
Return value
array An array of module configuration data sorted by weight and name.
File
-
core/
lib/ Drupal/ Core/ Extension/ ModuleWeight.php, line 65
Class
- ModuleWeight
- Class that manages weights.
Namespace
Drupal\Core\ExtensionCode
public function sort(array $data) : array {
// PHP array sorting functions such as uasort() do not work with both keys
// and values at the same time, so we achieve weight and name sorting by
// computing strings with both information concatenated (weight first, name
// second) and use that as a regular string sort reference list via
// array_multisort(), compound of
// "[sign-as-integer][padded-integer-weight][name]"; e.g., given two
// modules and weights (spaces added for clarity):
// - Block with weight -5: 0 0000000000000000005 block
// - Node with weight 0: 1 0000000000000000000 node
$sort = [];
foreach ($data as $name => $weight) {
// Prefix negative weights with 0, positive weights with 1.
// +/- signs cannot be used, since + (ASCII 43) is before - (ASCII 45).
$prefix = (int) ($weight >= 0);
// The maximum weight is PHP_INT_MAX, so pad all weights to 19 digits.
$sort[] = $prefix . sprintf('%019d', abs($weight)) . $name;
}
array_multisort($sort, SORT_STRING, $data);
return $data;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.