src/ReportTypes/ReportTypesRepository.php
protected function toArrayOfReportTypes($items)
    {
        $result = [];

        // Если влетело некоторое скалярное выражение - то преобразуем его в массив по разделителю
        if (is_scalar($items) && ! empty($items)) {
            $items = explode(',', trim((string) $items));
        }

        // Если элементом является объект, умеющим себя преобразовывать в массив - то преобразуем
        if (\is_object($items) && ! ($items instanceof ReportType) && \method_exists($items, 'toArray')) {
            $items = $items->toArray();
        }

        foreach ((array) $items as $key => $value) {
            if ($value instanceof ReportType) {
                // Если элементом уже является объект типа ReportType - то сразу его пушим в стек
                $result[] = $value;
            } elseif (\is_scalar($value) && ! empty($value)) {
                // Если влетела строка - то пушим в стек объект, у которого и имя, и UID равны этой строке
                $report_type = new ReportType;
                $report_type->setUid($value);
                $report_type->setName($value);

                $result[] = $report_type;
            } elseif (\is_array($value) || $value instanceof Traversable) {
                // Если массив или перебираемое дерьмо - то работаем с ним
                $report_type = new ReportType;
                $report_type->setName($key);
                $report_type->configure($value);

                $result[] = $report_type;
            }
        }

        return $result;
    }
protected function toArrayOfReportTypes($items)
    {
        $result = [];

        // Если влетело некоторое скалярное выражение - то преобразуем его в массив по разделителю
        if (is_scalar($items) && ! empty($items)) {
            $items = explode(',', trim((string) $items));
        }

        // Если элементом является объект, умеющим себя преобразовывать в массив - то преобразуем
        if (\is_object($items) && ! ($items instanceof ReportType) && \method_exists($items, 'toArray')) {
            $items = $items->toArray();
        }

        foreach ((array) $items as $key => $value) {
            if ($value instanceof ReportType) {
                // Если элементом уже является объект типа ReportType - то сразу его пушим в стек
                $result[] = $value;
            } elseif (\is_scalar($value) && ! empty($value)) {
                // Если влетела строка - то пушим в стек объект, у которого и имя, и UID равны этой строке
                $report_type = new ReportType;
                $report_type->setUid($value);
                $report_type->setName($value);

                $result[] = $report_type;
            } elseif (\is_array($value) || $value instanceof Traversable) {
                // Если массив или перебираемое дерьмо - то работаем с ним
                $report_type = new ReportType;
                $report_type->setName($key);
                $report_type->configure($value);

                $result[] = $report_type;
            }
        }

        return $result;
    }
Преобразует входящее значение в массив объектов типа ReportType.

Принимает на вход массив данных о типах отчетов, и в их соответствии формирует коллекцию данных. Формат
массивов может быть следующим:

<code>
new ReportType('uid_0')

'uid_0'

'uid_0,uid_1'

[
'uid_1',
'uid_2',
]

[
'uid_1' => ['uid' => 'report_1_uid', 'description' => 'Some 1 description'],
'uid_2' => ['id' => 'report_2_uid',  'desc' => 'Some 2 description'],
['name' => 'some_3_name', 'id' => 'report_3_uid', 'description' => 'Some 3 description'],
]
</code>

@param string|array|array[]|object $items

@return ReportType[]|array