diff options
Diffstat (limited to 'inc/arrayutil.inc.php')
-rw-r--r-- | inc/arrayutil.inc.php | 77 |
1 files changed, 68 insertions, 9 deletions
diff --git a/inc/arrayutil.inc.php b/inc/arrayutil.inc.php index ec6e2a5f..3d93d7d5 100644 --- a/inc/arrayutil.inc.php +++ b/inc/arrayutil.inc.php @@ -1,24 +1,83 @@ <?php +declare(strict_types=1); + class ArrayUtil { /** * Take an array of arrays, take given key from each sub-array and return * new array with just those corresponding values. - * @param array $list - * @param string $key - * @return array */ - public static function flattenByKey($list, $key) + public static function flattenByKey(array $list, string $key): array + { + return array_column($list, $key); + } + + /** + * Pass an array of arrays you want to merge. The keys of the outer array will become + * the inner keys of the resulting array, and vice versa. + */ + public static function mergeByKey(array $arrays): array { - $ret = []; - foreach ($list as $item) { - if (array_key_exists($key, $item)) { - $ret[] = $item[$key]; + $empty = array_combine(array_keys($arrays), array_fill(0, count($arrays), false)); + $out = []; + foreach ($arrays as $subkey => $array) { + foreach ($array as $key => $item) { + if (!isset($out[$key])) { + $out[$key] = $empty; + } + $out[$key][$subkey] = $item; } } - return $ret; + return $out; + } + + /** + * Sort array by given column. + */ + public static function sortByColumn(array &$array, string $column, int $sortOrder = SORT_ASC, int $sortFlags = SORT_REGULAR): void + { + $sorter = array_column($array, $column); + array_multisort($sorter, $sortOrder, $sortFlags, $array); + } + + /** + * Check whether $array contains all keys given in $keyList + * + * @param array $array An array + * @param array $keyList A list of strings which must all be valid keys in $array + */ + public static function hasAllKeys(array $array, array $keyList): bool + { + foreach ($keyList as $key) { + if (!isset($array[$key])) + return false; + } + return true; + } + + /** + * Check if all elements in given array are primitive types, + * i.e. not object, array or resource. + */ + public static function isOnlyPrimitiveTypes(array $array): bool + { + foreach ($array as $item) { + if (is_array($item) || is_object($item) || is_resource($item)) + return false; + } + return true; + } + + /** + * Force each element of given array to be of type $type. + */ + public static function forceType(array &$array, string $type): void + { + foreach ($array as &$elem) { + settype($elem, $type); + } } }
\ No newline at end of file |