Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
6 / 6 |
CRAP | |
100.00% |
12 / 12 |
| SortArray | |
100.00% |
1 / 1 |
|
100.00% |
6 / 6 |
16 | |
100.00% |
12 / 12 |
| sortByWeightElement | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| sortByWeightProperty | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| sortByTitleElement | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| sortByTitleProperty | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| sortByKeyString | |
100.00% |
1 / 1 |
5 | |
100.00% |
3 / 3 |
|||
| sortByKeyInt | |
100.00% |
1 / 1 |
7 | |
100.00% |
5 / 5 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Component\Utility\SortArray. | |
| */ | |
| namespace Drupal\Component\Utility; | |
| /** | |
| * Provides generic array sorting helper methods. | |
| * | |
| * @ingroup utility | |
| */ | |
| class SortArray { | |
| /** | |
| * Sorts a structured array by the 'weight' element. | |
| * | |
| * Note that the sorting is by the 'weight' array element, not by the render | |
| * element property '#weight'. | |
| * | |
| * Callback for uasort(). | |
| * | |
| * @param array $a | |
| * First item for comparison. The compared items should be associative | |
| * arrays that optionally include a 'weight' element. For items without a | |
| * 'weight' element, a default value of 0 will be used. | |
| * @param array $b | |
| * Second item for comparison. | |
| * | |
| * @return int | |
| * The comparison result for uasort(). | |
| */ | |
| public static function sortByWeightElement(array $a, array $b) { | |
| return static::sortByKeyInt($a, $b, 'weight'); | |
| } | |
| /** | |
| * Sorts a structured array by '#weight' property. | |
| * | |
| * Callback for uasort(). | |
| * | |
| * @param array $a | |
| * First item for comparison. The compared items should be associative | |
| * arrays that optionally include a '#weight' key. | |
| * @param array $b | |
| * Second item for comparison. | |
| * | |
| * @return int | |
| * The comparison result for uasort(). | |
| */ | |
| public static function sortByWeightProperty($a, $b) { | |
| return static::sortByKeyInt($a, $b, '#weight'); | |
| } | |
| /** | |
| * Sorts a structured array by 'title' key (no # prefix). | |
| * | |
| * Callback for uasort(). | |
| * | |
| * @param array $a | |
| * First item for comparison. The compared items should be associative arrays | |
| * that optionally include a 'title' key. | |
| * @param array $b | |
| * Second item for comparison. | |
| * | |
| * @return int | |
| * The comparison result for uasort(). | |
| */ | |
| public static function sortByTitleElement($a, $b) { | |
| return static::sortByKeyString($a, $b, 'title'); | |
| } | |
| /** | |
| * Sorts a structured array by '#title' property. | |
| * | |
| * Callback for uasort(). | |
| * | |
| * @param array $a | |
| * First item for comparison. The compared items should be associative arrays | |
| * that optionally include a '#title' key. | |
| * @param array $b | |
| * Second item for comparison. | |
| * | |
| * @return int | |
| * The comparison result for uasort(). | |
| */ | |
| public static function sortByTitleProperty($a, $b) { | |
| return static::sortByKeyString($a, $b, '#title'); | |
| } | |
| /** | |
| * Sorts a string array item by an arbitrary key. | |
| * | |
| * @param array $a | |
| * First item for comparison. | |
| * @param array $b | |
| * Second item for comparison. | |
| * @param string $key | |
| * The key to use in the comparison. | |
| * | |
| * @return int | |
| * The comparison result for uasort(). | |
| */ | |
| public static function sortByKeyString($a, $b, $key) { | |
| $a_title = (is_array($a) && isset($a[$key])) ? $a[$key] : ''; | |
| $b_title = (is_array($b) && isset($b[$key])) ? $b[$key] : ''; | |
| return strnatcasecmp($a_title, $b_title); | |
| } | |
| /** | |
| * Sorts an integer array item by an arbitrary key. | |
| * | |
| * @param array $a | |
| * First item for comparison. | |
| * @param array $b | |
| * Second item for comparison. | |
| * @param string $key | |
| * The key to use in the comparison. | |
| * | |
| * @return int | |
| * The comparison result for uasort(). | |
| */ | |
| public static function sortByKeyInt($a, $b, $key) { | |
| $a_weight = (is_array($a) && isset($a[$key])) ? $a[$key] : 0; | |
| $b_weight = (is_array($b) && isset($b[$key])) ? $b[$key] : 0; | |
| if ($a_weight == $b_weight) { | |
| return 0; | |
| } | |
| return ($a_weight < $b_weight) ? -1 : 1; | |
| } | |
| } |