<?php

namespace goodboyalex\php_components_pack\extensions;

/**
 * Расширение массивов.
 *
 * @author Александр Бабаев
 * @package php_components_pack
 * @version 1.0
 * @since 1.0
 */
final class ArrayExtension
{
    /**
     * Удаляет пустые строки в массиве.
     *
     * @param array $array Исходный массив
     * @param bool $reOrder Переиндексировать массив
     *
     * @return array Результирующим массив без пустых строк
     */
    public static function RemoveEmpties (array $array, bool $reOrder = false): array
    {
        // Удаляем пустые строки
        $result = array_filter($array, fn ($value) => !is_null($value) && $value !== '');

        // Переиндексируем массив
        if ($reOrder)
            $result = array_values($result);

        // Возвращаем результат
        return $result;
    }

    /**
     * Выделяет в смешанном массиве ассоциативный массив
     *
     * @param array $array Исходный массив
     *
     * @return array Ассоциативный массив, содержащийся в исходном массиве
     */
    public static function GetAssociativePart (array $array): array
    {
        // Фильтруем массив, оставляя только элементы со строковыми ключами
        return array_filter($array, fn ($key) => self::IsStringKey($key), ARRAY_FILTER_USE_KEY);
    }

    /**
     * Функция для проверки, является ли ключ строковым
     *
     * @param mixed $key Ключ
     *
     * @return bool Является ли ключ строковым типом
     */
    public static function IsStringKey (mixed $key): bool
    {
        return !is_int($key);
    }
}