* @copyright Copyright (c) 2013 - 2020, Alex Tselegidis * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 * @link http://easyappointments.org * @since v1.4.0 * ---------------------------------------------------------------------------- */ if (!function_exists('is_assoc')) { /** * Check if an array is an associative array. * * @param array $array * * @return bool */ function is_assoc(array $array): bool { if (empty($array)) { return false; } return array_keys($array) !== range(0, count($array) - 1); } } if (!function_exists('array_find')) { /** * Find the first array element based on the provided function. * * @param array $array * @param callable $callback * * @return mixed */ function array_find(array $array, callable $callback): mixed { if (empty($array)) { return null; } if (!is_callable($callback)) { throw new InvalidArgumentException('No filter function provided.'); } return array_values(array_filter($array, $callback))[0] ?? null; } } if (!function_exists('array_fields')) { /** * Keep only the provided fields of an array. * * @param array $array * @param array $fields * * @return array */ function array_fields(array $array, array $fields): array { return array_filter( $array, function ($field) use ($fields) { return in_array($field, $fields); }, ARRAY_FILTER_USE_KEY, ); } }